概述
贴上题目链接:UVa540
题目解析:该题目中有两个队列:每个团队有一个队列,而团队整体又形成一个队列。例如,有三个团队编号分别为1,2,3,每个团队的队员集合分别为{101,102,103}、{201,202}、{301、302、303},团队的整体队列为{3,1,2},代码如下:
#include<iostream>
#include<cmath>
#include<cstdio>
#include<map>
#include<algorithm>
#include<vector>
#include<set>
#include<stack>
#include<queue>
using namespace std;
const int maxt=1010;
int main()
{
int t,kase=0;
while(cin>>t &&t){
printf("Scenario #%dn",++kase);
//记录所有人的团队编号
map<int,int> team; //team[x]表示编号为x的人所在的团队
for(int i=0;i<t;i++){
int n,x;
scanf("%d",&n);
while(n--){
scanf("%d",&x);
team[x]=i;
}
}
//模拟
queue<int> q,q2[maxt]; //q是团队的队列,而q2[i]是团队成员i所在的队列
for(;;){
int x;
char cmd[10];
scanf("s",cmd);
if(cmd[0]=='S') break;
else if(cmd[0]=='D'){
int t=q.front();
printf("%dn",q2[t].front());
q2[t].pop();
if(q2[t].empty()) q.pop();//团体t全体出队列
}
else if(cmd[0]=='E'){
scanf("%d",&x);
int t=team[x];
if(q2[t].empty()) q.push(t); //团队t进入队列
q2[t].push(x);
}
}
printf("n");
}
return 0;
}
**队列(Queue)**包含在头文件中,队列也是一种运算受限的线性表,两头都有限制,插入只能在表的一端进行(只进不出),而删除只能在表的另一端进行(只出不进),允许删除的一端称为队尾(rear),允许插入的一端称为队头 (Front),如图所示:
队列的基本操作:
头文件
push(x) 将x压入队列的末端
pop() 弹出队列的第一个元素(队顶元素),注意此函数并不返回任何值
front() 返回第一个元素(队顶元素)
back() 返回最后被压入的元素(队尾元素)
empty() 当队列为空时,返回true
size() 返回队列的长度
最后
以上就是眯眯眼纸飞机为你收集整理的算法 团体队列 UVa540 及C++STL之队列回顾的全部内容,希望文章能够帮你解决算法 团体队列 UVa540 及C++STL之队列回顾所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复