水题,模拟即可。
注意无错的返回,需要判断是否为空。
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <queue>
#include <stack>
#include <algorithm>
#define MAXN 10000
#define MOD 1000000007
#define INF 2139062143
#define ll long long
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
bool pq=true,q=true,s=true;
int p,t;
stack<int> sk;
priority_queue<int,vector<int>,less<int> > prique;
queue<int> que;
for(int i=0; i<n; ++i)
{
scanf("%d%d",&p,&t);
if(p==1)
{
sk.push(t);
prique.push(t);
que.push(t);
}
else
{
if(sk.empty()||t!=sk.top())
s=false;
if(prique.empty()||t!=prique.top())
pq=false;
if(que.empty()||t!=que.front())
q=false;
if(!sk.empty()) sk.pop();
if(!prique.empty()) prique.pop();
if(!que.empty()) que.pop();
}
}
if(!s&&!q&&!pq) puts("impossible");
else if((s&&q)||(q&&pq)||(pq&&s)) puts("not sure");
else if(s) puts("stack");
else if(pq) puts("priority queue");
else if(q) puts("queue");
}
return 0;
}