UVA540 Team Queue

题目链接https://vjudge.net/problem/UVA-540

这道题符合先进先出的规则,那么用队列。这道题需要用到两个队列,每个团队形成一个队列q1[1000](最多有1000个团队)这些团队一起又形成一个队列q

这道题让我明白:原来定义队列不仅仅可以是queue<int>q,还可以queue<int>q[1000],定义为数组

代码如下

#include<cstdio>
#include<iostream>
#include<queue>
#include<map>
#include<string>
using namespace std;
int main()
{
	int t,kase=0;
	while(cin>>t&&t)
	{
		queue<int>q,q1[1003];
		cout<<"Scenario"<<" #"<<++kase<<endl;
		map<int,int>team;
		//记录每个队列有哪些人
		for(int i=0;i<t;i++)
		{
			int n;
			cin>>n;
			while(n--)
			{
				int m;
				cin>>m;
				team[m]=i;//m人属于i队列
			}
		}
		//模拟命令
		string cmd;
		while(cin>>cmd&&cmd!="STOP")
		{
			if(cmd[0]=='E')
			{
				int person;
				cin>>person;
				int gteam=team[person];
				if(q1[gteam].empty())q.push(gteam);
				q1[gteam].push(person);
			}
			else
			{
				int gteam=q.front();
				int person=q1[gteam].front();
				cout<<person<<endl;
				q1[gteam].pop();
				if(q1[gteam].empty())q.pop();
			}
		}
		printf("\n");
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41626975/article/details/81948292