uva 540 (Team Queue UVA - 540)

又是一道比较复杂的模拟题。题中有两种队列,一种是总队列,从前向后。其他的是各个团体的小队列,因为入队的人如果有队友的话,会优先进入团体队列。

所以我们先设置两个队列和一个map,设置map倒是可以不用担心开多大数组这样的问题。然后开两个队列,一个是基本的q1,另一个是q2[1010]

一般的STL容器如string vector deque都是有两种直接初始化的方法(不严谨)一种是a(maxn)这个和一维数组差不多,直接赋给里面多少元素,另一种就是a[maxn]这个差不多是一个容器的数组,每一个a[i]代表一个容器。还可以跟string相似的用a[i][j]去寻找容器内的元素

然后先把各个小团体放入总队列(如果团体队列里面没有其他元素),然后去除的时候就是把前面的团体队列里面的首位去除就行,输出团体队列的首位元素,如果这之后第一个团体队列没有元素,那么直接踢掉这个团体队列

我的代码(刘汝佳算法)

#include <bits/stdc++.h>
//这个地方还得注意不要按照定义数组的习惯把STL容器都放到main外面,现在我还不知道怎么像memset一样清零STL容器,为此还WA。
using namespace std;
main()
{
    int n;
    int cas=0;
    while(cin>>n&&n)
    {
        map<int,int> mp;
        for(int i=0;i<n;i++)
        {
            int t;
            cin>>t;
            while(t--)
            {
                int num;
                cin>>num;
                mp[num]=i;  
            }   
        }
    queue<int> q1,q2[1010];
    printf("Scenario #%d\n",++cas);
    string a;
    while(cin>>a)
    {
        if(a[0]=='S')
        break;
        if(a[0]=='D')
        {
            int t=q1.front();
            cout<<q2[t].front()<<endl;
            q2[t].pop();
            if(q2[t].empty())
            q1.pop();
        }
        if(a[0]=='E')
        {
            int num;
            cin>>num;
            int t=mp[num];
            if(q2[t].empty()) q1.push(t);
            q2[t].push(num);
        }
    }
    cout<<"\n";
}
}

转载于:https://www.cnblogs.com/baccano-acmer/p/9803317.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值