来源:http://acm.hust.edu.cn:8080/judge/contest/view.action?cid=9948#problem/D
题意:就是给你一种队列,两端都能插入,两端都能删除,然后给你一些操作,输出操作的结果。
思路:用deque可以完美实现,题目没什么难度。。。
代码:
#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
#include <deque>
using namespace std;
int main(){
//freopen("1.txt","r",stdin);
int numcase;
scanf("%d",&numcase);
for(int K = 1; K <= numcase; ++K){
int numlen,numopera,x;
scanf("%d%d",&numlen,&numopera);
string ss;
deque<int> qq;
printf("Case %d:\n",K);
while(numopera--){
cin>>ss;
if(ss == "pushLeft"){
scanf("%d",&x);
if(qq.size() < numlen){
qq.push_front(x);
printf("Pushed in left: %d\n",x);
}
else{
printf("The queue is full\n");
}
}
else if(ss == "pushRight"){
scanf("%d",&x);
if(qq.size() < numlen){
qq.push_back(x);
printf("Pushed in right: %d\n",x);
}
else{
printf("The queue is full\n");
}
}
else if( ss == "popLeft" ){
if(qq.size() > 0){
x = qq.front();
qq.pop_front();
printf("Popped from left: %d\n",x);
}
else{
printf("The queue is empty\n");
}
}
else if( ss == "popRight"){
if(qq.size() > 0){
x = qq.back();
qq.pop_back();
printf("Popped from right: %d\n",x);
}
else{
printf("The queue is empty\n");
}
}
}
}
return 0;
}