思路: STL模拟
分析:
1 分别用三种STL去模拟这些操作,然后进行判断输出
2 比较简单
代码:
#include<stack> #include<queue> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; stack<int> stk; queue<int> que; priority_queue<int> p_que; int n; bool is_stack , is_queue , is_Pqueue; void init(){ while(!stk.empty()) stk.pop(); while(!que.empty()) que.pop(); while(!p_que.empty()) p_que.pop(); is_stack = is_queue = is_Pqueue = true; } void insert(int x){ stk.push(x); que.push(x); p_que.push(x); } void pop(int x){ if(is_stack){ if(!stk.empty() && x == stk.top()) stk.pop(); else is_stack = false; } if(is_queue){ if(!que.empty() && x == que.front()) que.pop(); else is_queue = false; } if(is_Pqueue){ if(!p_que.empty() && x == p_que.top()) p_que.pop(); else is_Pqueue = false; } } void output(){ if(is_stack && !is_queue && !is_Pqueue) puts("stack"); else if(!is_stack && is_queue && !is_Pqueue) puts("queue"); else if(!is_stack && !is_queue && is_Pqueue) puts("priority queue"); else if(!is_stack && !is_queue && !is_Pqueue) puts("impossible"); else puts("not sure"); } int main(){ int x , y; while(scanf("%d" , &n) != EOF){ init(); for(int i = 0 ; i < n ; i++){ scanf("%d%d" , &x , &y); if(x == 1) insert(y); else pop(y); } output(); } return 0; }