Submission #166728

#TimeUsernameProblemLanguageResultExecution timeMemory
166728alanhpereiraCave (IOI13_cave)C++11
100 / 100
1085 ms564 KiB
#include "cave.h" #define MAX 5123 int ans[MAX]; int att[MAX]; int crsp[MAX]; void invert(int l, int r) { //printf("inverting %d to %d\n", l, r); for (int i = l; i <= r; i++) att[i] = !att[i]; } int goFor(int N) { for (int j = 0; j < N; j++) { if (ans[j] != -1) att[j] = ans[j]; } /*printf("trying:\n"); for (int i = 0; i < N; i++) { printf("%d ", att[i]); } printf("\n");*/ int ret = tryCombination(att); //printf("got %d\n", ret); return ret; } void exploreCave(int N) { for (int i = 0; i < N; i++) { ans[i] = -1; att[i] = 0; } for (int i = 0; i < N; i++) { int ret = goFor(N); int lastState = ret == i; int l = 0, r = N - 1; while (l != r) { int mid = (l + r) / 2; invert(l, mid); ret = goFor(N); int state = ret == i; if (state == lastState) { l = mid + 1; } else { r = mid; } lastState = state; } crsp[l] = i; //printf("lastState is %d\n", lastState); if (lastState) ans[l] = !att[l]; else ans[l] = att[l]; //printf("ans[%d]=%d\n", l, ans[l]); //printf("crsp[%d]=%d\n\n", l, crsp[l]); } answer(ans, crsp); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...