// Problem written by Albert Lai // This solution written by Thomas Tang #include #include /* internally coin is labelled as 1 thru 12 */ #define NUM 12 int coin[NUM+1]; /* coin[0] is nothing */ void result(int r) { if (r > 0) { printf("heavier %d\n", r-1); } else if (r < 0) { printf("lighter %d\n", -r-1); } else { printf("Inconsistent!\n"); } } void finalWeigh(int a, int b, int ifL, int ifR, int ifE) { char line[10]; printf("%d %d\n", a-1, b-1); fflush(stdout); scanf("%s", line); if (strcmp(line, "L") == 0) { result(ifL); } else if (strcmp(line, "R") == 0) { result(ifR); } else { result(ifE); } } /* deals only with 9 thru 12 */ void equal() { char line[10]; printf("8 9 10 0\n"); fflush(stdout); scanf("%s", line); if (strcmp(line, "L") == 0) { finalWeigh(coin[9], coin[10], coin[9], coin[10], -coin[11]); } else if (strcmp(line, "R") == 0) { finalWeigh(coin[9], coin[10], -coin[10], -coin[9], coin[11]); } else { finalWeigh(coin[12], coin[1], coin[12], -coin[12], 0); } } /* coin[0123] > coin[4567] */ void leftHeavier() { char line[10]; printf("%d %d %d %d %d %d\n", coin[1]-1, coin[2]-1, coin[5]-1, coin[3]-1, coin[4]-1, coin[9]-1); fflush(stdout); scanf("%s", line); if (strcmp(line, "L") == 0) { finalWeigh(coin[1], coin[2], coin[1], coin[2], 0); } else if (strcmp(line, "R") == 0) { finalWeigh(coin[3], coin[4], coin[3], coin[4], -coin[5]); } else { finalWeigh(coin[6], coin[7], -coin[7], -coin[6], -coin[8]); } } main() { int i, j; char line[10]; for (i = 1; i <= NUM; i++) { coin[i] = i; } printf("0 1 2 3 4 5 6 7\n"); fflush(stdout); scanf("%s", line); if (strcmp(line, "E") == 0) { equal(); } else { if (strcmp(line, "R") == 0) { for (i = 1; i <= 4; i++) { coin[i] = i+4; coin[4+i] = i; } } leftHeavier(); } }