南邮 OJ 2023 会漏的栈

会漏的栈

时间限制(普通/Java) :  1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 228            测试通过 : 74 

比赛描述

从前从前,有一个容量为K的栈...容量为K的意思是指,如果该栈里已经有K个元素了,现在还要再压一个元素x进去,则原栈底部的元素就会消失,然后就有一个空余的空间来把x压进栈里面。
例如K = 3,原栈从底部到顶部的元素分别为1,2,3,现在要压4进去,则底部的1会消失,2往下掉变成底部元素,3也往下掉,最后4压进来。整个栈的元素自底向顶序列就变成2,3,4.

so, 现在给该容器的容量K,和m个操作序列,操作分两种:
<1> push x      把x压入栈,x < 2^32
<2> pop         栈顶元素出栈
对于每个<2>操作,输出出栈的元素,若在操作前栈就已经为空,则输出"Empty!"(不包含引号).

//如果不知道什么是栈的话,自行搜索...如有不便,敬请原谅-_-



输入

第一行两个个整数K, m (1 <= K <= 100, 1 <= m <=10000)
接下来m行,每行表一个操作,如上所述。

输出

对于每个pop操作,输出其结果

样例输入

1 5
push 3
push 2
pop
push 4
pop

样例输出

2
4

提示

null

题目来源

NUPT






#include<iostream>
#include<string>
#include<queue>
using namespace std;
int main(){
	__int64 k,m,num;
	string cmd;
	deque<__int64> q;
	cin>>k>>m;
	while(m--){
		cin>>cmd;
		if('u'==cmd[1]){		//优化前后全是62 MS
			cin>>num;
			q.push_back(num);
			if((int)q.size()>k){
				q.pop_front();
			}
		}else{
			if(q.empty()){
				cout<<"Empty!"<<endl;
			}else{
				num = q.back();
				q.pop_back();
				cout<<num<<endl;
			}
		}
	}
}


你可能感兴趣的:(ACM,南邮OJ,会漏的栈)