学不会今天的内容——种树,只能补补昨天的题了OTZ
先补了个昨天的G题(竟因没反应过来priority queue是优先队列没有写QAQ太菜了)
https://vjudge.net/contest/209626#problem/G
↓
题意:给n行数据,如果是1就塞进去,2就拿出来,判断是队列还是优先队列还是栈,都不是就输出impossible,不确定就输出not sure.
思路:STL大法↓
#include<cstdio> #include<stack> #include<queue> using namespace std; int main() { int n; while(scanf("%d",&n)!=EOF) { int is_stack,is_queue,is_priority_queue;//标记 queue<int>q; priority_queue<int>pq; stack<int>st; is_stack=1,is_queue=1,is_priority_queue=1; int flag=0,temp1,temp2; while(n--){ scanf("%d %d",&temp1,&temp2); if(temp1==1) { q.push(temp2); pq.push(temp2); st.push(temp2); } else { if(!q.empty()) { if(q.front()!=temp2) is_queue=0; q.pop(); } else is_queue=0; if(!pq.empty()) { if(pq.top()!=temp2) is_priority_queue=0; pq.pop(); } else is_priority_queue=0; if(!st.empty()) { if(st.top()!=temp2) is_stack=0; st.pop(); } else is_stack=0; } } if(is_queue==1) flag++; if(is_priority_queue==1) flag++; if(is_stack==1) flag++; if(flag==0) printf("impossible\n"); else if(flag==1) { if(is_queue==1) printf("queue\n"); if(is_priority_queue==1) printf("priority queue\n"); if(is_stack==1) printf("stack\n"); } else printf("not sure\n"); } return 0; }