概述
题目的意思就是就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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复