UVA540

这道题目还是比较简单的,只要做题的思路正确,那么解题应该是很迅速的。

但是犯了一个很弱智的错误

string s

scanf("%s",s)

这样的形式会在访问s的时候,比如s[0],报string越界的错误

下面贴出代码

#include<cstdio>
#include<queue>
#include<cstring>
#include<string>
#include<map>
using namespace std;
//难点在于如何保存某个元素属于哪个队

map<int,int>ele_team;
int num_team=0,num_element,kase=0;
int is_in_queue[1005];

char comd[20];

void print_queue()
{
    printf("\n");
    for(int i=0;i<num_team;i++)
    {
        printf(" %d ",is_in_queue[i]);
    }
    printf("\n\n");
}

int main()
{
#ifdef local
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
#endif
    while(scanf("%d",&num_team)==1&&num_team)
    {
        printf("Scenario #%d\n",++kase);
        queue<int>Q[1005];
        queue<int>team;
        
        memset(is_in_queue,0,sizeof(is_in_queue));
        for(int i=0;i<num_team;i++)
        {
            int num_element;
            scanf("%d",&num_element);
            for(int j=0;j<num_element;j++)
            {
                int elements;
                scanf("%d",&elements);
                ele_team[elements]=i;
            }
        }
            while(scanf("%s",comd))
            {

//printf("%s\n",comd);
                if(comd[0]=='S')
                {
                    printf("\n");
                    break;
                }
                if(comd[0]=='E')
                {
                    int elements;
                    scanf("%d",&elements);
//printf("%d\n",elements);
                    if(!is_in_queue[ele_team[elements]])//不在队中
                    {
                        team.push(ele_team[elements]);
                        is_in_queue[ele_team[elements]]=1;
                    }
                    Q[ele_team[elements]].push(elements);
                }
                if(comd[0]=='D')
                {
                    int x=team.front();
                    int elements=Q[x].front();
                    printf("%d\n",elements);
                    Q[x].pop();
                    if(Q[x].empty())
                    {
                        team.pop();
                        is_in_queue[x]=0;
                    }
                }
//print_queue();
            }
    }
}

正如上面所述:难点应该在如何保存每一个elelments所对应的队

转载于:https://www.cnblogs.com/TorettoRui/p/10419258.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值