基础的数据结构的应用。
用三个flag分别表示是否可能是stack,queue,priority queue即可。
传送门:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18700
#include <cstdio>
#include <cstring>
#include <stack>
#include <queue>
#include <iostream>
#include <algorithm>
using namespace std;
stack <int > s;
queue <int > q;
priority_queue <int > p;
int a[1005];
void Deal_with() {
int n;
while(~scanf("%d",&n)) {
int tempa,value;
int flag1 = 0 ,flag2 = 0 ,flag3 = 0;
int cnt = 0;
int k = 0;
while(!s.empty())s.pop();
while(!p.empty())p.pop();
while(!q.empty())q.pop();
for(int i = 0 ; i < n ; i ++) {
scanf("%d %d",&tempa,&value);
if(tempa == 1) {
s.push(value);
q.push(value);
p.push(value);
}
else {
if(!flag1) {
if(!s.empty()){
if(s.top() != value){
flag1 = 1;
}
s.pop();
}
else{
flag1 = 1;
}
}
if(!flag2) {
if(!q.empty()) {
if(q.front() != value) {
flag2 = 1;
}
q.pop();
}
else {
flag2 = 1;
}
}
if(!flag3) {
if(!p.empty()) {
if(p.top() != value) {
flag3 = 1;
}
p.pop();
}
else {
flag3 = 1;
}
}
}
}
if(flag1 == 0 && flag2 && flag3) {
puts("stack");
}
else if(flag2 == 0 && flag1 && flag3 ){
puts("queue");
}
else if(flag3 == 0 && flag1 && flag2 ){
puts("priority queue");
}
else if(flag1 && flag2 && flag3) {
puts("impossible");
}
else {
puts("not sure");
}
//queue
//not sure
//impossible
//stack
//priority queue
}
}
int main(void) {
// freopen("a.in","r",stdin);
Deal_with();
return 0;
}