天天看點

UVA 11995

 刷水題刷的比較爽,這題也是比較簡單的一題,pat上剛剛也考過一個pop sequence與這題類似,直接模拟即可,分别建立stack,queue,priority_queue然後分别模拟push,pop,最後判斷即可。 代碼:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <stack>
#include <queue>

using namespace std;

int main(){
	int n,op,num;
	bool is_stack, is_queue, is_priority;
	while(scanf("%d",&n)!=EOF){
		stack<int> adt_1;
		queue<int> adt_2;
		priority_queue<int> adt_3;
		is_stack = true;
		is_queue = true;
		is_priority = true;
		for(int i=0;i<n;i++){
			scanf("%d%d",&op,&num);
			if(is_stack||is_queue||is_priority){
				switch(op){
				case 1:
					adt_1.push(num);
					adt_2.push(num);
					adt_3.push(num);
					break;
				case 2:
					if(is_stack){
						if((adt_1.empty())||(adt_1.top()!=num))
							is_stack = false;
						else
							adt_1.pop();
					}
					if(is_queue){
						if((adt_2.empty())||(adt_2.front()!=num))
							is_queue = false;
						else
							adt_2.pop();
					}
					if(is_priority){
						if((adt_3.empty())||(adt_3.top()!=num))
							is_priority = false;
						else
							adt_3.pop();
					}
					break;
				}
			}
		}
		if(is_stack&&!is_queue&&!is_priority){
			printf("stack\n");
		}
		else if(!is_stack&&is_queue&&!is_priority){
			printf("queue\n");
		}
		else if(!is_stack&&!is_queue&&is_priority){
			printf("priority queue\n");
		}
		else if(!is_stack&&!is_queue&&!is_priority){
			printf("impossible\n");
		}
		else{
			printf("not sure\n");
		}
	}
	return 0;
}