2018_2_3_I Can Guess the Data Structure!_STL_模拟

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ujn20161222/article/details/79249827
https://vjudge.net/problem/UVA-11995
#include<iostream>
#include<stack>
#include<queue>
#include<cstdio>

using namespace std;
const int N=1000+10;

int n;
int op[N],x[N];

int main(){
	while(scanf("%d",&n)!=EOF){
		for(int i=0;i<n;i++)
		scanf("%d%d",op+i,x+i);
		stack<int> st;
		queue<int> q;
		priority_queue<int> heap;
		int flag1=true,flag2=true,flag3=true;
		for(int i=0;i<n;i++)
		if(op[i]==1)st.push(x[i]);
		else{
			if(st.empty()){
				flag1=false;break;
			}int u=st.top();
			st.pop();
			if(u!=x[i]){
				flag1=false;break;
			}
		}
		
		for(int i=0;i<n;i++)
		if(op[i]==1)q.push(x[i]);
		else{
			if(st.empty()){
				flag2=false;break;
			}int u=q.front();
			q.pop();
			if(u!=x[i]){
				flag2=false;break;
			}
		}
		
		for(int i=0;i<n;i++)
		if(op[i]==1)heap.push(x[i]);
		else{
			if(heap.empty()){
				flag3=false;break;
			}int u=heap.top();
			heap.pop();
			if(u!=x[i]){
				flag3=false;break;
			}
		}
		if(!flag1&&!flag2&&!flag3){
			puts("impossible");continue;
		}
		if(flag1&&!flag2&&!flag3){
			puts("stack");continue;
		}
		if(!flag1&&flag2&&!flag3){
			puts("queue");continue;
		}
		if(!flag1&&!flag2&&flag3){
			puts("priority queue");continue;
		}
		puts("not sure");
	}
} 


阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页