poj2259(团队队列)

来源:互联网 发布:卡片机 知乎 编辑:程序博客网 时间:2024/05/15 13:40

题目大意

输入:

                团队数t

                 接下来t行开头m,后跟m个数为这个团队成员;

                接下来是操作STOP表示结束

#include <iostream>#include<cstring>#include<cstdlib>#include<string>#include<cstdio>#include<queue>#include<stack>#include<vector>#include<map>#include<list>#include<set>#define INF 1<<30using namespace std;const int maxp=1000000;const int maxt=1000;const int maxn=200000+10;struct node{    int p,pre,next;}r[maxn];int used,belong[maxp],pos[maxt],st,ed;int main(){    int t,loop=0;    scanf("%d",&t);    while(t)    {        for(int i=0;i<t;i++)        {            int m;            scanf("%d",&m);            for(int j=0;j<m;j++)            {                int x;                scanf("%d",&x);                belong[x]=i;            }            pos[i]=-1;        }        used=0;st=ed=-1;        if(loop)  puts("");        printf("Scenario #%d\n",++loop);        string s;        cin>>s;        while(s!="STOP")        {            if(s=="ENQUEUE")            {                int x;                cin>>x;                r[used].p=x;                int s=pos[belong[x]];                if(s<0)                {                    r[used].pre=ed;                    r[used].next=-1;                    if(ed>=0)   r[ed].next=used;                    ed=used;                    if(st<0) st=used;                }                else                {                    r[used].pre=s;                    r[used].next=r[s].next;                    if(s==ed)   ed=used;                    r[s].next=used;                    if(r[used].next>=0)  r[r[used].next].pre=used;                }                pos[belong[x]]=used++;            }            else            {                cout<<r[st].p<<endl;                if(st==pos[belong[r[st].p]])                    pos[belong[r[st].p]]=-1;                st=r[st].next;            }            cin>>s;        }        cin>>t;    }    return 0;}


0 0
原创粉丝点击