题意:这道题的题目是“猜猜数据结构”,题意就是给你一些输入输出数据,让你根据这些数据判断是什么数据结构。要猜的数据结构只有三种,栈(stack)、队列(queue)、优先队列(priority_queue)。输出有5种情况,前三种分别是确定了一种数据结构,第四种是三种数据结构都不符合,第五种是有2种或2种以上符合。
#include <bits/stdc++.h>
using namespace std;
int n;
int main()
{
int a,b;
while (scanf("%d",&n)!=EOF)
{
stack<int>s;
queue<int>q;
priority_queue<int,vector<int>,less<int> >p;
int f[4];
for(int i=0;i<4;i++) f[i]=1;
for(int i=1;i<=n;i++)
{
scanf("%d %d",&a,&b);
if(a==1) ///分别进入三种数据结构
{
s.push(b);
q.push(b);
p.push(b);
}
else
{
if(!s.empty())
{
if(s.top()!=b)///进栈
{
f[0]=0;
}
s.pop();
}
else
f[0]=0;
if(!q.empty())///进队
{
if(q.front()!=b)
{
f[1]=0;
}
q.pop();
}
else
f[1]=0;
if(!p.empty()) ///进优先队列
{
if(p.top()!=b)
{
f[2]=0;
}
p.pop();
}
else
f[2]=0;
}
}
int cnt=0;
for(int j=0;j<3;j++)
{
if(f[j]==1)
cnt+=1;
}
if(cnt==0)
cout<<"impossible\n";
else if(cnt>1)
cout<<"not sure\n";
else
{
if(f[0])
cout<<"stack\n";
if(f[1])
cout<<"queue\n";
if(f[2])
cout<<"priority queue\n";
}
}
}