1.28寒假集训-1(补题)

本文介绍了一道关于通过一系列操作判断所使用数据结构类型的题目解析。利用C++ STL中的队列、栈和优先队列,实现了对输入操作序列的模拟,并据此判断其可能的数据结构类型。

学不会今天的内容——种树,只能补补昨天的题了OTZ

先补了个昨天的G题(竟因没反应过来priority queue是优先队列没有写QAQ太菜了)

https://vjudge.net/contest/209626#problem/G

题意:给n行数据,如果是1就塞进去,2就拿出来,判断是队列还是优先队列还是栈,都不是就输出impossible,不确定就输出not sure.

思路:STL大法↓

#include<cstdio>
#include<stack>
#include<queue>
using namespace std;



int main()
{
	int n;
	while(scanf("%d",&n)!=EOF)
	{
		int is_stack,is_queue,is_priority_queue;//标记
		queue<int>q;
		priority_queue<int>pq;
		stack<int>st;
		is_stack=1,is_queue=1,is_priority_queue=1;
		int flag=0,temp1,temp2;
		while(n--){
		scanf("%d %d",&temp1,&temp2);
		if(temp1==1)
		{
			q.push(temp2);
			pq.push(temp2);
			st.push(temp2);
		}
		else
		{
			if(!q.empty())
			{
				if(q.front()!=temp2)
					is_queue=0;
				q.pop();
			}
			else
				is_queue=0;
			if(!pq.empty())
			{
				if(pq.top()!=temp2)
					is_priority_queue=0;
				pq.pop();
			}
			else
				is_priority_queue=0;
			if(!st.empty())
			{
				if(st.top()!=temp2)
					is_stack=0;
				st.pop();
			}
			else
				is_stack=0;
		}
		}
		if(is_queue==1) flag++;
		if(is_priority_queue==1) flag++;
		if(is_stack==1) flag++;
		if(flag==0)
			printf("impossible\n");
		else if(flag==1)
		{
			if(is_queue==1) printf("queue\n");
			if(is_priority_queue==1) printf("priority queue\n");
			if(is_stack==1) printf("stack\n");
		}
		else
			printf("not sure\n");

	}


	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值