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;
} 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值