#include #include #include static struct Ins { char op[4]; int arg; } prog[1024]; static int len; static int acc; static int pc; static void step(void) { if (!strcmp(prog[pc].op, "acc")) { acc += prog[pc].arg; } else if (!strcmp(prog[pc].op, "jmp")) { pc += prog[pc].arg; return; } pc++; } static int terminates(void) { acc = 0; pc = 0; int ran[1024] = {0}; while (!ran[pc]++ && pc < len) { step(); } return pc == len; } int main(void) { while (EOF != scanf("%s %d\n", prog[len].op, &prog[len].arg)) { len++; } terminates(); printf("%d\n", acc); for (int i = 0; i < len; ++i) { if (!strcmp(prog[i].op, "jmp")) { strcpy(prog[i].op, "nop"); if (terminates()) break; strcpy(prog[i].op, "jmp"); } else if (!strcmp(prog[i].op, "nop")) { strcpy(prog[i].op, "jmp"); if (terminates()) break; strcpy(prog[i].op, "nop"); } } printf("%d\n", acc); }