我是靠谱客的博主 机灵百褶裙,最近开发中收集的这篇文章主要介绍UVA540,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目的意思就是就t个队伍的人要去排队。。

ENQUEUE就排进去,如果队列里有他的队友,就排到他后面去。没有就排到队末。。

DNQUEUE就把队头弄出来输出。。


思路就是用一个map,来记录每个队员是在哪个队。再是用一个队列p。存现在在队列中的队伍标号。

再用一个队列数组p2[1010],存每个team的人有哪些在队列中。

比如队伍1的人来排队,就放到p2[1]里面。。如果这时候p2[1]是空的,1队没人在排队。。就把1存进p里,这个队伍进入排队。

要输出的时候就把p的第一个看一下,是哪个队排在最前面,再把这个队自己的那个队列里第一个输出来。要是这个队空了,那就把这个队伍编号也从p里pop()掉。。


AC代码:


#include<iostream>
#include<queue>
#include<map>
using namespace std;

int main () {
	int T;
	int num;
	map<int,int> team;
	int t;
	int cas = 1;
	queue<int> p,p2[1010];
	while (cin >> T && T) {
		cout <<"Scenario #" << cas++ <<endl;
		for(int i = 0;i < T;i++) {
			cin >> t;
			for (int j = 0;j < t;j++) {
				cin >> num;
				team[num] = i;	
			}
		}

		while (1) {
			string cmd;
			int num;
			cin >> cmd;
			if (cmd == "STOP")
				break;
			if (cmd == "ENQUEUE") {
				int num1;
				cin >> num1;
				int t = team[num1];
				if(p2[t].empty())
					p.push(t);
				p2[t].push(num1);
			}
			if (cmd == "DEQUEUE") {
				int t = p.front();
				cout << p2[t].front() << endl;
				p2[t].pop();
				if (p2[t].empty())
					p.pop();

			}
		}
		cout << endl;
		while (!p.empty())
			p.pop();
		for(int i = 0 ; i < T ;i++) {
			while (!p2[i].empty())
				p2[i].pop();

		}

	}

	return 0;
}


最后

以上就是机灵百褶裙为你收集整理的UVA540的全部内容,希望文章能够帮你解决UVA540所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部