题意:给定一个包,然后给定这个包的一些操作以此来判断包的数据结构类型。
思路:直接按照stl来模拟即可。
code:
#include <bits/stdc++.h>
using namespace std;const int N=1000 + 10;
int t[N],v[N],n;int check_st(){stack<int>s;for (int i=0;i<n;i++){if (t[i]==2){if (s.empty()) return 0;int k=s.top();s.pop();if (k!=v[i]) return 0;}else s.push(v[i]);}return 1;
}
int check_q(){queue<int>q;for (int i=0;i<n;i++){if (t[i]==2){if (q.empty()) return 0;int k=q.front();q.pop();if (k!=v[i]) return 0;}else q.push(v[i]);}return 1;
}
int check_pq(){priority_queue<int>q;for (int i=0;i<n;i++){if (t[i]==2){if (q.empty()) return 0;int k=q.top();q.pop();if (k!=v[i]) return 0;}else q.push(v[i]);}return 1;
}
int main()
{while (~scanf("%d",&n)){for (int i=0;i<n;i++) scanf("%d%d",&t[i],&v[i]);int s=check_st(),p=check_q(),pq=check_pq();if (!p&&!pq&&!s) puts("impossible");else if(!p&&!pq&&s) puts("stack");else if (p&&!pq&&!s) puts("queue");else if (!p&&pq&&!s) puts("priority queue");else puts("not sure");}
}