Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
另附两份最新WA的代码In Reply To:WA得快死了,救命啊! Posted by:cpp0600648238 at 2007-07-23 23:45:58 #include<iostream> #include<cstring> #include<memory> using namespace std; char l[1001][101]={0}; bool visited[1000]={0},f; int L; int op(int a[10],int n,char *ptr) { if(visited[n]) { f=0; return 999999; } visited[n]=1; int r[10],i; for(i=0;i<10;i++) r[i]=a[i]; r[0]=n; char *tmp1=ptr,*tmp2=ptr; while(tmp1-l[0]<L*101) { if(!f) return 999999; if(strstr(tmp1,"ENDIF")) { tmp1+=sizeof(char)*101; continue; } tmp2=tmp1; while(*tmp2&&(*tmp2)!=' ') tmp2++; tmp2++; if(strstr(tmp1,"MOV")) { tmp2++; int num=*tmp2-'0'; tmp2+=2; if(*tmp2=='R') { tmp2++; r[num]=r[*tmp2-'0']; } else r[num]=atoi(tmp2); tmp1+=sizeof(char)*101; } else if(strstr(tmp1,"ADD")) { tmp2++; int num=*tmp2-'0'; tmp2+=2; if(*tmp2=='R') { tmp2++; r[num]+=r[*tmp2-'0']; } else r[num]+=atoi(tmp2); r[num]%=1000; tmp1+=sizeof(char)*101; } else if(strstr(tmp1,"SUB")) { tmp2++; int num=*tmp2-'0'; tmp2+=2; if(*tmp2=='R') { tmp2++; r[num]-=r[*tmp2-'0']; } else r[num]-=atoi(tmp2); if(r[num]<0) r[num]+=1000; tmp1+=sizeof(char)*101; } else if(strstr(tmp1,"MUL")) { tmp2++; int num=*tmp2-'0'; tmp2+=2; if(*tmp2=='R') { tmp2++; r[num]*=r[*tmp2-'0']; } else r[num]*=atoi(tmp2); r[num]%=1000; tmp1+=sizeof(char)*101; } else if(strstr(tmp1,"DIV")) { tmp2++; int num=*tmp2-'0'; tmp2+=2; if(*tmp2=='R') { tmp2++; if(!r[*tmp2-'0']) r[num]=0; else r[num]/=r[*tmp2-'0']; } else if(atoi(tmp2)) r[num]/=atoi(tmp2); else r[num]=0; tmp1+=sizeof(char)*101; } else if(strstr(tmp1,"MOD")) { tmp2++; int num=*tmp2-'0'; tmp2+=2; if(*tmp2=='R') { tmp2++; if(!r[*tmp2-'0']) r[num]=0; else r[num]%=r[*tmp2-'0']; } else if(atoi(tmp2)) r[num]%=atoi(tmp2); else r[num]=0; tmp1+=sizeof(char)*101; } else if(strstr(tmp1,"IFEQ")) { int num,num1; if(*tmp2=='R') { tmp2++; num=r[*tmp2-'0']; } else num=atoi(tmp2); while(*tmp2!=',') tmp2++; tmp2++; if(*tmp2=='R') { tmp2++; num1=r[*tmp2-'0']; } else num1=atoi(tmp2); if(num1==num) { tmp1+=sizeof(char)*101; continue; } else { int ifc=1; while(tmp1-l[0]<L*101&&ifc) { tmp1+=sizeof(char)*101; if(strstr(tmp1,"ENDIF")) { ifc--; continue; } if(strstr(tmp1,"IF")) ifc++; } if(tmp1-l[0]>=L*101) { f=0; return 999999; } tmp1+=sizeof(char)*101; } } else if(strstr(tmp1,"IFNEQ")) { int num,num1; if(*tmp2=='R') { tmp2++; num=r[*tmp2-'0']; } else num=atoi(tmp2); while(*tmp2!=',') tmp2++; tmp2++; if(*tmp2=='R') { tmp2++; num1=r[*tmp2-'0']; } else num1=atoi(tmp2); if(num1!=num) { tmp1+=sizeof(char)*101; continue; } else { int ifc=1; while(tmp1-l[0]<L*101&&ifc) { tmp1+=sizeof(char)*101; if(strstr(tmp1,"ENDIF")) { ifc--; continue; } if(strstr(tmp1,"IF")) ifc++; } if(tmp1-l[0]>=L*101) { f=0; return 999999; } tmp1+=sizeof(char)*101; } } else if(strstr(tmp1,"IFG")) { int num,num1; if(*tmp2=='R') { tmp2++; num=r[*tmp2-'0']; } else num=atoi(tmp2); while(*tmp2!=',') tmp2++; tmp2++; if(*tmp2=='R') { tmp2++; num1=r[*tmp2-'0']; } else num1=atoi(tmp2); if(num>num1) { tmp1+=sizeof(char)*101; continue; } else { int ifc=1; while(tmp1-l[0]<L*101&&ifc) { tmp1+=sizeof(char)*101; if(strstr(tmp1,"ENDIF")) { ifc--; continue; } if(strstr(tmp1,"IF")) ifc++; } if(tmp1-l[0]>=L*101) { f=0; return 999999; } tmp1+=sizeof(char)*101; } } else if(strstr(tmp1,"IFL")) { int num,num1; if(*tmp2=='R') { tmp2++; num=r[*tmp2-'0']; } else num=atoi(tmp2); while(*tmp2!=',') tmp2++; tmp2++; if(*tmp2=='R') { tmp2++; num1=r[*tmp2-'0']; } else num1=atoi(tmp2); if(num<num1) { tmp1+=sizeof(char)*101; continue; } else { int ifc=1; while(tmp1-l[0]<L*101&&ifc) { tmp1+=sizeof(char)*101; if(strstr(tmp1,"ENDIF")) { ifc--; continue; } if(strstr(tmp1,"IF")) ifc++; } if(tmp1-l[0]>=L*101) { f=0; return 999999; } tmp1+=sizeof(char)*101; } } else if(strstr(tmp1,"IFGE")) { int num,num1; if(*tmp2=='R') { tmp2++; num=r[*tmp2-'0']; } else num=atoi(tmp2); while(*tmp2!=',') tmp2++; tmp2++; if(*tmp2=='R') { tmp2++; num1=r[*tmp2-'0']; } else num1=atoi(tmp2); if(num>=num1) { tmp1+=sizeof(char)*101; continue; } else { int ifc=1; while(tmp1-l[0]<L*101&&ifc) { tmp1+=sizeof(char)*101; if(strstr(tmp1,"ENDIF")) { ifc--; continue; } if(strstr(tmp1,"IF")) ifc++; } if(tmp1-l[0]>=L*101) { f=0; return 999999; } tmp1+=sizeof(char)*101; } } else if(strstr(tmp1,"IFLE")) { int num,num1; if(*tmp2=='R') { tmp2++; num=r[*tmp2-'0']; } else num=atoi(tmp2); while(*tmp2!=',') tmp2++; tmp2++; if(*tmp2=='R') { tmp2++; num1=r[*tmp2-'0']; } else num1=atoi(tmp2); if(num<=num1) { tmp1+=sizeof(char)*101; continue; } else { int ifc=1; while(tmp1-l[0]<L*101&&ifc) { tmp1+=sizeof(char)*101; if(strstr(tmp1,"ENDIF")) { ifc--; continue; } if(strstr(tmp1,"IF")) ifc++; } if(tmp1-l[0]>=L*101) { f=0; return 999999; } tmp1+=sizeof(char)*101; } } else if(strstr(tmp1,"CALL")) { int num; if(*tmp2=='R') { tmp2++; num=r[*tmp2-'0']; } else num=atoi(tmp2); r[9]=op(r,num,ptr); tmp1+=sizeof(char)*101; } else if(strstr(tmp1,"RET")) { int num; if(*tmp2=='R') { tmp2++; num=r[*tmp2-'0']; } else num=atoi(tmp2); visited[n]=0; return num; } } if(tmp1-l[0]>=L*101) { f=0; return 999999; } return 0; } main() { int N,i; int r[10],num; char *p=0; while(cin>>L>>N&&L+N) { cin.get(); memset(visited,0,sizeof(visited)); memset(l,0,sizeof(l)); f=1; for(i=0;i<L;i++) cin.getline(l[i],100); memset(r,0,sizeof(r)); p=l[0]; num=op(r,N,p); if(f) cout<<num<<endl; else cout<<"*"<<endl; } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator