1.28寒假集训-1(补题)

学不会今天的内容——种树,只能补补昨天的题了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;
}


猜你喜欢

转载自blog.csdn.net/qq_39396954/article/details/79185859