PKU : 2577 - Interpreter
アルゴリズム
シミュレーションするしかないです.
プログラム
int main(void){ int loc = 0; int reg[10],a[1000],b[1000],c[1000]; string s; memset(reg,0,sizeof(reg)); memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); for(int i=0;cin>>s;i++){ a[i] = s[0] - '0'; b[i] = s[1] - '0'; c[i] = s[2] - '0'; } int ans = 0; while(1){ ans++; if(a[loc] == 0){ if(reg[c[loc]] != 0){ loc = reg[b[loc]]; continue; } } else if(a[loc] == 1){ if(b[loc] == 0 && c[loc] == 0){ break; } } else if(a[loc] == 2){ reg[b[loc]] = c[loc]; } else if(a[loc] == 3){ reg[b[loc]] = (reg[b[loc]] + c[loc]) % 1000; } else if(a[loc] == 4){ reg[b[loc]] = (reg[b[loc]] * c[loc]) % 1000; } else if(a[loc] == 5){ reg[b[loc]] = reg[c[loc]]; } else if(a[loc] == 6){ reg[b[loc]] = (reg[b[loc]] + reg[c[loc]]) % 1000; } else if(a[loc] == 7){ reg[b[loc]] = (reg[b[loc]] * reg[c[loc]]) % 1000; } else if(a[loc] == 8){ int idx = reg[c[loc]]; reg[b[loc]] = a[idx] * 100 + b[idx] * 10 + c[idx]; } else if(a[loc] == 9){ int idx = reg[c[loc]]; a[idx] = reg[b[loc]] / 100; b[idx] = reg[b[loc]] / 10 % 10; c[idx] = reg[b[loc]] % 10; } loc++; } cout<<ans<<endl; }