uva 540 Team Queue---比较好的数据结构题!!!!!思路不全面啊!

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
struct LIST
{
    int v;
    int tnum;
    struct LIST *next;
};
int team[1000000];
LIST *p[10050];//1
LIST l[2000030];
int top;
int main()
{
//    freopen("ex.in","r",stdin);
    int k=0,t,n,temp;
    char str[9];
    while(scanf("%d",&t)&&t)
    {
        printf("Scenario #%d\n",++k);
        memset(team,0,sizeof(team));
        memset(p,0,sizeof(p));


        for(int i=1; i<=t; i++)
        {
            scanf("%d",&n);
            for(int j=0; j<n; j++)
            {
                scanf("%d",&temp);
                team[temp]=i;
            }
        }




        top=0;
        LIST h,*e=&h,*head=&h,*pp;
        h.next=NULL;
        int count=0;
        while(scanf("%s",str))
        {
            count++;
            if(str[0]=='E')
            {
                scanf("%d",&temp);
                l[top].v=temp;
                l[top].tnum=team[temp];


                if(p[team[temp]]==NULL)
                {
                    e->next=&l[top];
                    e=&l[top];
                    p[team[temp]]=&l[top];
                    l[top].next=NULL;


                }
                else
                {


                    l[top].next=p[team[temp]]->next;
                    
                    if(p[team[temp]]->next==NULL)//开始没考率全面!!wa了n次
                    e=&l[top];
                    
                    p[team[temp]]->next=&l[top];
                    p[team[temp]]=&l[top];
                }
                ++top;
            }
            else if(str[0]=='D')
            {
                pp=head->next;
                printf("%d\n",pp->v);
                if(pp->next==NULL||pp->tnum!=pp->next->tnum)//一个也没有的时候pp->next==NULL
                p[team[pp->v]]=NULL;
//                p[pp->tnum]=NULL;//等同


                head=head->next;
            }
            else if(str[0]=='S')
                break;
        }


        printf("\n");
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值