Submission #637553

#TimeUsernameProblemLanguageResultExecution timeMemory
637553boris_mihov커다란 상품 (IOI17_prize)C++17
20 / 100
79 ms3528 KiB
#include "prize.h" #include <algorithm> #include <iostream> #include <cassert> #include <numeric> #include <vector> typedef long long llong; const int MAXN = 200000 + 10; const int INF = 1e9; int ans; std::vector <int> res; std::pair <int,int> asked[MAXN]; inline std::pair <int,int> query(int pos) { if (asked[pos].first != -1) return asked[pos]; res = ask(pos - 1); if (res[0] + res[1] == 0) ans = pos; return asked[pos] = {res[0], res[1]}; } int leftCnt; int rightCnt; int cntBig; int binaryCnt; int binarySearchLeft(int from, int to) { binaryCnt++; int l = from, r = to, mid; while (l < r - 1) { int mid = (l + r) / 2; auto [left, right] = query(mid); if (ans != 0) return -1; if (left + right != cntBig) { r = mid; continue; } if (left != leftCnt) { r = mid; continue; } l = mid; } leftCnt++; return r; } int binarySearchRight(int from, int to) { binaryCnt++; int l = from, r = to, mid; while (l < r - 1) { int mid = (l + r) / 2; auto [left, right] = query(mid); if (ans != 0) return -1; if (left + right != cntBig) { l = mid; continue; } if (right != rightCnt) { l = mid; continue; } r = mid; } rightCnt++; return l; } int find_best(int n) { srand(69); std::fill(asked + 1, asked + 1 + n, std::make_pair(-1, -1)); for (int i = 1 ; i <= 10 ; ++i) { int rndPos = rand()%n + 1; cntBig = std::max(cntBig, query(rndPos).first + query(rndPos).second); } int l = 0, r = n + 1; while (ans == 0 && binaryCnt <= 10000) { if (rand()%2 == 0) l = binarySearchLeft(l, r); else r = binarySearchRight(l, r); } assert(binaryCnt != 10001); return ans - 1; }

Compilation message (stderr)

prize.cpp: In function 'int binarySearchLeft(int, int)':
prize.cpp:31:27: warning: unused variable 'mid' [-Wunused-variable]
   31 |     int l = from, r = to, mid;
      |                           ^~~
prize.cpp: In function 'int binarySearchRight(int, int)':
prize.cpp:59:27: warning: unused variable 'mid' [-Wunused-variable]
   59 |     int l = from, r = to, mid;
      |                           ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...