题目:http://7xjob4.com1.z0.glb.clouddn.com/5332b565f1539b27a3d913adc0a363ae
本题只要熟悉栈,队列,优先队列,直接模拟就可以 过掉
下面是AC代码:
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
using namespace std;
int num[1005],re[1005],n;
bool judgeStack()
{
stack<int>s;
while(!s.empty())
{
s.pop();
}
for(int i=0; i<n; i++)
{
if(num[i]==1)
{
s.push(re[i]);
}
else
{
if(s.empty())
{
return 0;
}
else
{
if(s.top()==re[i])
{
s.pop();
}
else
{
return 0;
}
}
}
}
return 1;
}
bool judgeQueue()
{
queue<int>q;
while(!q.empty())
{
q.pop();
}
for(int i=0; i<n; i++)
{
if(num[i]==1)
{
q.push(re[i]);
}
else
{
if(q.empty())
{
return 0;
}
else
{
if(q.front()==re[i])
{
q.pop();
}
else
{
return 0;
}
}
}
}
return 1;
}
bool judgePriorityqueue()
{
priority_queue<int>pq;
while(!pq.empty())
{
pq.pop();
}
for(int i=0; i<n; i++)
{
if(num[i]==1)
{
pq.push(re[i]);
}
else
{
if(pq.empty())
{
return 0;
}
else
{
if(pq.top()==re[i])
{
pq.pop();
}
else
{
return 0;
}
}
}
}
return 1;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
for(int i=0; i<n; i++)
{
scanf("%d%d",&num[i],&re[i]);
}
int flag=0;
if(judgePriorityqueue())
{
flag++;
}
if(judgeQueue())
{
flag++;
}
if(judgeStack())
{
flag++;
}
if(flag==0)
{
printf("impossible\n");
}
if(flag>=2)
{
printf("not sure\n");
continue;
}
if(judgePriorityqueue())
{
printf("priority queue\n");
}
if(judgeQueue())
{
printf("queue\n");
}
if(judgeStack())
{
printf("stack\n");
}
}
return 0;
}