Submission #1184138

#TimeUsernameProblemLanguageResultExecution timeMemory
1184138alterioAliens (IOI07_aliens)C++20
100 / 100
1 ms408 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long ll n; int ask(ll x, ll y) { if (x < 1 || x > n || y < 1 || y > n) return 0; cout << "examine " << x << " " << y << endl; string res; cin >> res; return (res == "true"); } int main() { ll x, y; cin >> n >> x >> y; ll sz = 3, cur = 0; ll l = x, r = x; while (1) { ll pos = x + sz + cur; ll get = ask(pos, y); if (get) { l = x + sz + cur; cur += sz; sz = cur + (cur % 2 == 0); } else { r = x + sz + cur; break; } } while (l + 1 < r) { ll mid = (l + r) / 2; ll get = ask(mid, y); if (get) l = mid; else r = mid; } ll rightSide = l; sz = 3, cur = 0; l = r = x; while (1) { ll pos = x - sz - cur; ll get = ask(pos, y); if (get) { r = x - sz - cur; cur += sz; sz = cur + (cur % 2 == 0); } else { l = x - sz - cur; break; } } while (l + 1 < r) { ll mid = (l + r) / 2; ll get = ask(mid, y); if (get) r = mid; else l = mid; } ll leftSide = r; ll sqSize = rightSide - leftSide + 1; l = y, r = y + sqSize; while (l + 1 < r) { ll mid = (l + r) / 2; ll get = ask(x, mid); if (get) l = mid; else r = mid; } ll topSide = l, botSide = l - sqSize + 1; ll centerX = leftSide + sqSize / 2, centerY = botSide + sqSize / 2; ll cnt = 1; ll get = ask(centerX + 2 * sqSize, centerY); if (get) cnt++; get = ask(centerX + 4 * sqSize, centerY); if (get) cnt++; get = ask(centerX - 2 * sqSize, centerY); if (get) cnt++; get = ask(centerX - 4 * sqSize, centerY); if (get) cnt++; if (cnt == 3) { ll get = ask(centerX + 2 * sqSize, centerY); ll bigPosX = 3; if (get) { bigPosX--; get = ask(centerX + 4 * sqSize, centerY); if (get) bigPosX--; } ll bigPosY = 3; get = ask(centerX, centerY + 2 * sqSize); if (get) { bigPosY--; get = ask(centerX, centerY + 4 * sqSize); if (get) bigPosY--; } cout << "solution " << centerX + (2 - bigPosX) * 2 * sqSize << " " << centerY + (2 - bigPosY) * 2 * sqSize << endl; } else { ll get = ask(centerX + 2 * sqSize, centerY); ll bigPosX = 3; if (get) bigPosX -= 2; ll bigPosY = 3; get = ask(centerX, centerY + 2 * sqSize); if (get) bigPosY -= 2; cout << "solution " << centerX + (2 - bigPosX) * sqSize << " " << centerY + (2 - bigPosY) * sqSize << endl; } }
#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...
#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...