這題PRESENTATION ERROR 搞半天>"<
主要就是Implement、Simulation。
主要就是Implement、Simulation。
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #define QUIT 0 #define MOVE 1 #define PILE 2 #define ONTO 3 #define OVER 4 struct node { int prev; int next; }; int n; node nods[100]; int clearat(int i) { int prc; while(nods[i].next!=-1) { prc=nods[i].next; nods[i].next=-1; nods[prc].prev=prc-n; nods[prc-n].next=prc; i=prc; } } int getend(int i) { while(nods[i].next!=-1) i=nods[i].next; return i; } int setto(int under,int a) { nods[nods[a].prev].next=-1; nods[under].next=a; nods[a].prev=under; } void showline(int i) { printf("%d:",i-1); while(nods[i].next!=-1) { i=nods[i].next; printf(" %d",i-n-1); } printf("\n"); } int cmd(char ch[5]) { //DEBUG //if(ch[0]=='z') // return 99; switch(ch[1]) { case 'u': return QUIT; case 'o': return MOVE; case 'i': return PILE; case 'n': return ONTO; case 'v': return OVER; } return QUIT; } int main() { while(scanf("%d",&n)!=EOF) { for(int lx =1;lx<=n;lx++) { nods[lx].prev=-1; nods[lx].next=lx+n; nods[n+lx].prev=lx; nods[n+lx].next=-1; } char cmd1[5],cmd2[5]; int a,b; while(1) { scanf("%s",cmd1); if(cmd(cmd1)==QUIT) break; /*if(cmd(cmd1)==99) { for(int lx=1;lx<=n;lx++) printf("qnd[%d]=%d\n",lx-1,getend(lx+n)-n-1); continue; }*/ scanf("%d %s %d",&a,cmd2,&b); a+=1;b+=1; if((a==b)||((getend(a+n)==getend(b+n)))) continue; if((cmd(cmd1)==MOVE)&&(cmd(cmd2)==ONTO)) { clearat(a+n);clearat(b+n); setto(b+n,a+n); } if((cmd(cmd1)==MOVE)&&(cmd(cmd2)==OVER)) { clearat(a+n); setto(getend(b+n),a+n); } if((cmd(cmd1)==PILE)&&(cmd(cmd2)==ONTO)) { clearat(b+n); setto(b+n,a+n); } if((cmd(cmd1)==PILE)&&(cmd(cmd2)==OVER)) setto(getend(b+n),a+n); /*printf("====================\n"); for(int lx=1;lx<=n;lx++) showline(lx);*/ } for(int lx=1;lx<=n;lx++) showline(lx); } return 0; }
沒有留言:
張貼留言