Advertisement
nontawat1996

1004

Mar 11th, 2013
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.82 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int st[10001][2],ans[10001],ians=0;
  4. int Nc,Ns,inst,last=1,first=1;
  5. struct asdf
  6. {
  7.     int index;
  8.     int room;
  9.     int id;
  10.     int rear;
  11. } data[10001];
  12. int findcs(int cs)
  13. {
  14.     int i=last,ck=1;
  15.     while(data[i].index!=-1 || data[i].room==cs)
  16.     {
  17.         if(data[i].room==cs)
  18.         {
  19.             ck=2;
  20.             break;
  21.         }
  22.         i=data[i].index;
  23.     }
  24.     if(ck==2) return i;
  25.     else return -1;
  26. }
  27. int main()
  28. {
  29.     int i,j,run,ck,cs;
  30.     int inn=0,out=0;
  31.     int node=1;
  32.     char in;
  33.     scanf("%d%d",&Nc,&Ns);
  34.     for(i=0; i<Ns; i++) scanf("%d %d",&st[i][0],&st[i][1]);
  35.     while(1)
  36.     {
  37.         scanf(" %c",&in);
  38.         if(in=='E')
  39.         {
  40.             inn++;
  41.             scanf("%d",&inst);
  42.             i=0;
  43.             while(st[i][1]!=inst) i++;
  44.             cs=st[i][0];
  45.             if(first==node)
  46.             {
  47.                 data[first].id=inst;
  48.                 data[first].index=-1;
  49.                 data[first].rear=-1;
  50.                 data[first].room=cs;
  51.                 node++;
  52.             }
  53.             else
  54.             {
  55.                 ck=findcs(cs);
  56.                 int renode;
  57.                 if(ck>0)
  58.                 {
  59.                     renode=data[ck].rear;
  60.                     data[node].id=inst;
  61.                     data[node].index=ck;
  62.                     data[node].room=cs;
  63.                     data[node].rear=renode;
  64.                     if(renode>0)
  65.                     {
  66.                         data[renode].index=node;
  67.                         data[ck].rear=node;
  68.                     }
  69.                     else
  70.                     {
  71.                         data[ck].rear=node;
  72.                         last=node;
  73.                     }
  74.                     node++;
  75.                 }
  76.                 else
  77.                 {
  78.                     data[node].id=inst;
  79.                     data[node].index=last;
  80.                     data[node].rear=-1;
  81.                     data[node].room=cs;
  82.                     data[last].rear=node;
  83.                     last=node;
  84.                     node++;
  85.                 }
  86.             }
  87.         }
  88.         else if(in=='D')
  89.         {
  90.             if(inn==out)
  91.             {
  92.                 printf("empty\n");
  93.                 int j;
  94.                 for(j=0;j<ians;j++) printf("%d\n",ans[j]);
  95.             }
  96.             else
  97.             {
  98.                 out++;
  99.                 int temp;
  100.                 printf("%d\n",data[first].id);
  101.                 ans[ians]=data[first].id;
  102.                 ians++;
  103.                 temp=data[first].rear;
  104.                 data[first].rear=-1;
  105.                 first=temp;
  106.                 data[first].index=-1;
  107.             }
  108.         }
  109.         else
  110.         {
  111.             printf("0\n");
  112.             return 0;
  113.         }
  114.     }
  115.     return 0;
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement