这个题其实就是掌握基础栈,队列,与优先队列基础操作的,将他们模仿一遍判断下就好,注意的是有个小坑,如果入的次数小于出的操作那明显是不可能的,要输出Impossible
#include<stdio.h>
#include<stdlib.h>
#include<queue>
#include<stack>
using namespace std;
stack <int> s1;//定义一个栈
queue <int> q1;//定义一个队列
priority_queue <int> q2;//定义一个优先队列
int main(){
int n,op,x;
bool t1,t2,t3;
while(scanf("%d",&n)!=EOF){
while(!s1.empty())s1.pop();
while(!q1.empty())q1.pop();
while(!q2.empty())q2.pop();
t1=t2=t3=true;
while(n--){
scanf("%d %d",&op,&x);
if(op==1){
s1.push(x);
q1.push(x);
q2.push(x);
}
if(op==2){
if(t1&&!s1.empty()){
if(s1.top()==x)s1.pop();
else t1=false;
}
else t1=false;
if(t2&&!q1.empty()){
if(q1.front()==x)q1.pop();
else t2=false;
}
else t2=false;
if(t3&&!q2.empty()){
if(q2.top()==x)q2.pop();
else t3=false;
}
else t3=false;
}
}
if(t1&&!t2&&!t3)printf("stack\n");
else if(t2&&!t1&&!t3)printf("queue\n");
else if(t3&&!t1&&!t2)printf("priority queue\n");
else if(t1||t2||t3)printf("not sure\n");
else printf("impossible\n");
}
return 0;
}