题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3146
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
题意:有一种名叫包的数据类型,要求通过输入输出情况判断是哪种数据类型。
思路:模拟题,将三种数据类型模拟出来,按照操作进行模拟。如果出现不符合的情况,标记出来,最后通过标记分析出来可能的数据结构。
注意:要注意不同情况的初始化,或者将数据类型定义在每种情况的局部。
代码:
#include<cstdio> #include<stack> #include<queue> using namespace std; int n; int main(void){ while(~scanf("%d",&n)){ int flag[3]={0}; stack<int> s; queue<int> q; priority_queue<int> pq; for(int i =0;i<n;i++){ int a =0;int b =0; scanf("%d %d",&a,&b); if(a ==1){ s.push(b); q.push(b); pq.push(b); }else { if(!s.empty()) { if(s.top() != b) flag[0] = 1; s.pop(); } else flag[0] = 1; if(!q.empty()) { if(q.front() != b) flag[1] = 1; q.pop(); } else flag[1] = 1; if(!pq.empty()) { if(pq.top() != b) flag[2] = 1; pq.pop(); } else flag[2] = 1; } } int count = 0; for(int i =0;i<3;i++){ count+=flag[i]; } if(count ==3) printf("impossible\n"); else if(count<2) printf("not sure\n"); else if(flag[0]==0) printf("stack\n"); else if(flag[1]==0) printf("queue\n"); else if(flag[2]==0) printf("priority queue\n"); } return 0; }