题目链接:UVA - 11995
题意:给你一串序列并告诉进出顺序,要你判断这串序列是在什么数据结构中,有stack、queue、priority queue或者有多种可能或者都不可能
思路:直接把进去的序列用stack、queue、priority queue进行模拟,比较出来的序列和给定序列,记录符合条件的个数,再判断即可
AC代码:
#include<iostream>
#include<stack>
#include<queue>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
queue<int>q;
priority_queue<int>p;
stack<int>s;
int flag[3]={0};
for(int i=0; i<n; i++)
{
int type,x;
cin>>type>>x;
if(type==1)
{
s.push(x);
q.push(x);
p.push(x);
}
if(type==2)
{
if(!flag[0] && !s.empty())
{
int y=s.top();
s.pop();
if(y!=x) flag[0]=1;
}
else flag[0]=1;
if(!flag[1] && !q.empty())
{
int y=q.front();
q.pop();
if(y!=x) flag[1]=1;
}
else flag[1]=1;
if(!flag[2] && !p.empty())
{
int y=p.top();
p.pop();
if(y!=x) flag[2]=1;
}
else flag[2]=1;
}
}
int cnt=0;
for(int i=0; i<3; i++)
{
if(flag[i]==0) cnt++;
}
if(cnt==0) cout<<"impossible"<<endl;
else if(cnt==1)
{
if(flag[0]==0) cout<<"stack"<<endl;
else if(flag[1]==0) cout<<"queue"<<endl;
else if(flag[2]==0) cout<<"priority queue"<<endl;
}
else cout<<"not sure"<<endl;
}
return 0;
}