Submission #592606

#TimeUsernameProblemLanguageResultExecution timeMemory
592606hltkThe Big Prize (IOI17_prize)C++17
20 / 100
3048 ms432 KiB
#include "prize.h" #include <bits/stdc++.h> using namespace std; using pii = pair<int, int>; unordered_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 <= 7000) { for (int i = 0; i < n; ++i) { auto [a, b] = m_ask(i); if (a + b == 0) { return i; } } throw; } vector<int> pt; for (int i = 0; i < n; i += 399) { pt.push_back(i); } int t = 0; for (int i : pt) { 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 st = i, ed = n - 1; for (int j : pt) { if (j <= i) continue; if (same(j)) { st = j; } else { ed = j - 1; break; } } while (st < ed) { int m = (st + ed) / 2; if (!same(m)) ed = m; else st = m + 1; } i = st - 1; } } }

Compilation message (stderr)

prize.cpp: In function 'int find_best(int)':
prize.cpp:30:14: warning: control reaches end of non-void function [-Wreturn-type]
   30 |  vector<int> pt;
      |              ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...