刷水题刷的比较爽,这题也是比较简单的一题,pat上刚刚也考过一个pop sequence与这题类似,直接模拟即可,分别建立stack,queue,priority_queue然后分别模拟push,pop,最后判断即可。 代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <stack>
#include <queue>
using namespace std;
int main(){
int n,op,num;
bool is_stack, is_queue, is_priority;
while(scanf("%d",&n)!=EOF){
stack<int> adt_1;
queue<int> adt_2;
priority_queue<int> adt_3;
is_stack = true;
is_queue = true;
is_priority = true;
for(int i=0;i<n;i++){
scanf("%d%d",&op,&num);
if(is_stack||is_queue||is_priority){
switch(op){
case 1:
adt_1.push(num);
adt_2.push(num);
adt_3.push(num);
break;
case 2:
if(is_stack){
if((adt_1.empty())||(adt_1.top()!=num))
is_stack = false;
else
adt_1.pop();
}
if(is_queue){
if((adt_2.empty())||(adt_2.front()!=num))
is_queue = false;
else
adt_2.pop();
}
if(is_priority){
if((adt_3.empty())||(adt_3.top()!=num))
is_priority = false;
else
adt_3.pop();
}
break;
}
}
}
if(is_stack&&!is_queue&&!is_priority){
printf("stack\n");
}
else if(!is_stack&&is_queue&&!is_priority){
printf("queue\n");
}
else if(!is_stack&&!is_queue&&is_priority){
printf("priority queue\n");
}
else if(!is_stack&&!is_queue&&!is_priority){
printf("impossible\n");
}
else{
printf("not sure\n");
}
}
return 0;
}