A - I Can Guess the Data Structure!
题意:
给出一系列数据的操作,1 x代表向某种抽象数据结构中存入x,2 x代表从该抽象数据结构中取出的元素为x,为该抽象数据结构类型为什么?
如果是优先队列则先取较大的元素。
思路:
对于每种数据结构判断一次,按条件输出即可,注意为空处理。
代码:
#include <bits/stdc++.h> using namespace std; #define ll long long #define ull unsigned long long #define cls(x) memset(x,0,sizeof(x)) #define clslow(x) memset(x,-1,sizeof(x)) const int mod=1e9+7; const int maxn=1e3+100; int n; struct Order { int x,type; }; Order order[maxn]; bool isStack() { stack<int>s; for(int i=1;i<=n;i++){ int x=order[i].x; int type=order[i].type; if(type==1) s.push(x); else if(type==2){ if(s.empty()) return false; if(s.top()!=x) return false; s.pop(); } } return true; } bool isQueue() { queue<int>q; for(int i=1;i<=n;i++){ int x=order[i].x; int type=order[i].type; if(type==1) q.push(x); else if(type==2){ if(q.empty()) return false; if(q.front()!=x) return false; q.pop(); } } return true; } bool isPriorityQueue() { priority_queue<int>q; for(int i=1;i<=n;i++){ int x=order[i].x; int type=order[i].type; if(type==1) q.push(x); else if(type==2){ if(q.empty()) return false; if(q.top()!=x) return false; q.pop(); } } return true; } int main() { // freopen("in.txt","r",stdin); while(~scanf("%d",&n)) { for(int i=1;i<=n;i++){ scanf("%d%d",&order[i].type,&order[i].x); } int cnt=isStack()+isQueue()+isPriorityQueue(); if(cnt==0){ printf("impossible "); } else if(cnt==1){ if(isStack()) printf("stack "); else if(isQueue()) printf("queue "); else if(isPriorityQueue()) printf("priority queue "); } else{ printf("not sure "); } } return 0; }