zoukankan      html  css  js  c++  java
  • Team Queue

    POJ

    题意:有t个团队的人正在排一个长队。每次新来一个人时,如果他有队友在排队,那么新人会插队到最后一个队友的身后。如果没有任何一个队友排队,则他会被排到长队的队尾。 输入每个团队中所有队员的编号,要求支持如下3中指令: ENQUEUE x:编号为x的人进入长队 DEQUEUE:长队的队首出队 STOP:停止模拟 对于每个DEQUEUE指令,输出出队的人的编号。

    分析:建立一个队列q[0]存储队伍中所有小组的编号,再为每个小组i建立一个队列q[i]存储队伍中这个小组的成员即可满足所有操作.

    卡了一个多小时,因为多组数据没有清空队列...

    #include<iostream>
    #include<cstdio>
    #include<queue>
    #include<cstdlib>
    using namespace std;
    inline int read(){
        int s=0,w=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){s=s*10+ch-'0';ch=getchar();}
        return s*w;
    }
    int T,team[1000001];
    string s;queue<int>q[1005];
    int main(){
    	while(1){
    		int n=read();if(!n)return 0;
    		printf("Scenario #%d
    ",++T);
    		for(int i=0;i<=n;++i)while(q[i].size())q[i].pop();
    		for(int i=1;i<=n;++i){
    			int num=read();
    			for(int j=1;j<=num;++j){
    				int k=read();
    				team[k]=i;
    			}
    		}
    		while(1){
    			cin>>s;
    			if(s[0]=='E'){
    				int num=read(),res=team[num];
    				if(q[res].empty())q[0].push(res);
    				q[res].push(num);
    			}
    			if(s[0]=='D'){
    				int id=q[0].front();
    				printf("%d
    ",q[id].front());q[id].pop();
    				if(q[id].empty())q[0].pop();
    			}
    			if(s[0]=='S'){printf("
    ");break;}
    		}
    	}
    	return 0;
    }
    
    
  • 相关阅读:
    epii.js简约而不简单的JS模板引擎
    Acwing 165. 小猫爬山
    《将博客搬家到csdn》
    Tourism【codeforces 1200E】
    Middle-Out【codeforces 1231E】(字符串匹配问题)
    super_log (广义欧拉降幂)(2019南京网络赛)
    Different Circle Permutation (HDU
    Knapsack Cryptosystem(状压dp)
    Quadratic equation(二次剩余定理)
    分级(线性dp)
  • 原文地址:https://www.cnblogs.com/PPXppx/p/11238787.html
Copyright © 2011-2022 走看看