Submission #592603

#TimeUsernameProblemLanguageResultExecution timeMemory
592603hltkThe Big Prize (IOI17_prize)C++17
90 / 100
100 ms912 KiB
#include "prize.h" #include <bits/stdc++.h> using namespace std; using pii = pair<int, int>; map<int, pii> C; pii m_ask(int i) { if (C.count(i)) return C[i]; auto a = ask(i); return C[i] = {a[0], a[1]}; } // 1, 2, 5, 26, 677 int find_best(int n) { if (n <= 1000) { for (int i = 0; i < n; ++i) { auto [a, b] = m_ask(i); if (a + b == 0) { return i; } } throw; } int t = 0; for (int i = 0; i < 800; ++i) { auto [a, b] = m_ask(i); t = max(t, a + b); } auto check = [&](int i) { auto [a, b] = m_ask(i); return a + b != t; }; for (int i = 0; i < n; ++i) { if (check(i)) { auto [a, b] = m_ask(i); if (a + b == 0) return i; } else { auto same = [&](int j) { return !check(j) && m_ask(j).second == m_ask(i).second; }; int l = i, r = n - 1; while (l < r) { int m = (l + r) / 2; if (!same(m)) r = m; else l = m + 1; } i = l - 1; } } }

Compilation message (stderr)

prize.cpp: In function 'int find_best(int)':
prize.cpp:56:1: warning: control reaches end of non-void function [-Wreturn-type]
   56 | }
      | ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...