题意:给定一个包,然后给定这个包的一些操作以此来判断包的数据结构类型。
思路:直接按照stl来模拟即可。
code:
#include <bits/stdc++.h>
using namespace std;
const int N=1000 + 10;
int t[N],v[N],n;
int check_st(){
stack<int>s;
for (int i=0;i<n;i++){
if (t[i]==2){
if (s.empty()) return 0;
int k=s.top();s.pop();
if (k!=v[i]) return 0;
}
else s.push(v[i]);
}
return 1;
}
int check_q(){
queue<int>q;
for (int i=0;i<n;i++){
if (t[i]==2){
if (q.empty()) return 0;
int k=q.front();q.pop();
if (k!=v[i]) return 0;
}
else q.push(v[i]);
}
return 1;
}
int check_pq(){
priority_queue<int>q;
for (int i=0;i<n;i++){
if (t[i]==2){
if (q.empty()) return 0;
int k=q.top();q.pop();
if (k!=v[i]) return 0;
}
else q.push(v[i]);
}
return 1;
}
int main()
{
while (~scanf("%d",&n)){
for (int i=0;i<n;i++) scanf("%d%d",&t[i],&v[i]);
int s=check_st(),p=check_q(),pq=check_pq();
if (!p&&!pq&&!s) puts("impossible");
else if(!p&&!pq&&s) puts("stack");
else if (p&&!pq&&!s) puts("queue");
else if (!p&&pq&&!s) puts("priority queue");
else puts("not sure");
}
}