深圳最好的网站制作哪家公司好,微网站下载资料怎么做,婚恋网站如何做推广,西安seo代理商目录 目录题目#xff1a;分析与解答1.队列先进先出#xff0c;正好符合排队问题#xff0c;所以用队列模拟2.每一个团队有一个队列#xff0c;团队整体又形成一个队列3.每一个团队的成员和团队编号需要对应#xff0c;因此利用map存编号为x的人所在的团队编号4.插入队分析与解答1.队列先进先出正好符合排队问题所以用队列模拟2.每一个团队有一个队列团队整体又形成一个队列3.每一个团队的成员和团队编号需要对应因此利用map存编号为x的人所在的团队编号4.插入队5.出队6.queue常用7.代码 题目
有t个团队的人正在排一个长队。每次新来一个人时,如果他有队友在排队,那么这个新人会插队到最后一个队友的身后。如果没有任何一个队友排队,则他会排到长队的队尾。输入每个团队中所有队员的编号,要求支持如下3种指令(前两种指令可以穿插进行)。 ENQUEUEx:编号为x的人进入长队。 DEQUEUE:长队的队首出队。 STOP:停止模拟。 对于每个DEQUEUE指令,输出出队的人的编号。 Sample Input 2 3 101 102 103 3 201 202 203 ENQUEUE 101 ENQUEUE 201 ENQUEUE 102 ENQUEUE 202 ENQUEUE 103 ENQUEUE 203 DEQUEUE DEQUEUE DEQUEUE DEQUEUE DEQUEUE DEQUEUE STOP 2 5 259001 259002 259003 259004 259005 6 260001 260002 260003 260004 260005 260006 ENQUEUE 259001 ENQUEUE 260001 ENQUEUE 259002 ENQUEUE 259003 ENQUEUE 259004 ENQUEUE 259005 DEQUEUE DEQUEUE ENQUEUE 260002 ENQUEUE 260003 DEQUEUE DEQUEUE DEQUEUE DEQUEUE STOP 0 Sample Output Scenario #1 101 102 103 201 202 203 Scenario #2 259001 259002 259003 259004 259005 260001
分析与解答
1.队列先进先出正好符合排队问题所以用队列模拟
2.每一个团队有一个队列团队整体又形成一个队列
q为团队队列q2[i]为团队i的成员队列
3.每一个团队的成员和团队编号需要对应因此利用map存编号为x的人所在的团队编号
知道团队成员就知道了团队编号 比如 map int ,intteam; team[x]i; 此时输入成员编号x就找到了团队编号i int tteam[x]
4.插入队
输入的是成员编号x根据int tteam[x]可以找到对应团队编号t
先判断团队有没有成员在队列中 if(q2[t].empty()) 如果没有则将团队t进入队列 然后插入团队t的成员
5.出队
先找到第一个团队 int tq.front() 输出第一个团队的第一个队员然后将第一个队员清除q2[t].pop() 如果此时这个团队没有人了就全体清出队列q.pop
6.queue常用
queue 的基本操作有 入队如例q.push(x); 将x 接到队列的末端。 出队如例q.pop(); 弹出队列的第一个元素注意并不会返回被弹出元素的值。 访问队首元素如例q.front()即最早被压入队列的元素。 访问队尾元素如例q.back()即最后被压入队列的元素。 判断队列空如例q.empty()当队列空时返回true。 访问队列中的元素个数如例q.size()
7.代码
#includecstdio
#includequeue
#includemap
using namespace std;const int maxt 100010;
int main(){int t,kase0;while(scanf(%d,t)1t){printf(Scenario #%d\n,kase);mapint,int team;//team[x]表示编号为x的人所在的团队编号 for(int i0;it;i){int n,x;scanf(%d,n);while(n--){scanf(%d,x);team[x]i;}}queueint 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 tq.front();//团队队首 printf(%d\n,q2[t].front());q2[t].pop();//队首团队的队首if(q2[t].empty()) q.pop(); }else if(cmd[0]E){scanf(%d,x);int t team[x];if(q2[t].empty()) q.push(t);q2[t].push(x);}} printf(\n);}
}