Submission #824228

#TimeUsernameProblemLanguageResultExecution timeMemory
824228SoulKnightCave (IOI13_cave)C++17
100 / 100
175 ms748 KiB
#include "cave.h" #include <iostream> using namespace std; #define ll long long #define ln '\n' int n; int s[5005], d[5005], t[5005], orig[5005], ans[5005]; bool hasOpen[5005]; int find(int door, int correct){ // find which switch door i corresponds to // cout << "enter" << ln; // cout << door << ' ' << correct << ln; int l = 0, r = n-1; while (l < r){ int mid = (l + r) / 2; for (int i = l; i <= r; i++) orig[i] = s[i]; for (int i = l; i <= mid; i++) { if (hasOpen[i]) continue; s[i] = 1 - correct; } for (int i = mid+1; i <= r; i++){ if (hasOpen[i]) continue; s[i] = correct; } // for (int i = 0; i < n; i++) cout << s[i] << ' '; // cout << ln; int res = tryCombination(s); if (res == -1) res = n; for (int i = l; i <= r; i++) s[i] = orig[i]; if (res == door) r = mid; else l = mid+1; } // cout << "door " << door << " corresponds to switch " << l << ln; s[l] = correct; hasOpen[l] = 1; ans[l] = door; return d[door]=l; } void exploreCave(int N) { int idx = 0, correct; n = N; int glit = 0; while (idx < N){ // cout << idx << ln; // for (int i = 0; i < n; i++) cout << s[i] << ' '; // cout << ln; int res = tryCombination(s); if (res == -1) res = n; if (res == idx) { correct = 1; find(idx, correct); idx++; } else { correct = 0; for (; idx < res; idx++) find(idx, correct); } } answer(s, ans); }

Compilation message (stderr)

cave.cpp: In function 'void exploreCave(int)':
cave.cpp:48:9: warning: unused variable 'glit' [-Wunused-variable]
   48 |     int glit = 0;
      |         ^~~~
#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...