제출 #1072439

#제출 시각아이디문제언어결과실행 시간메모리
1072439Joshua_Andersson커다란 상품 (IOI17_prize)C++14
94.61 / 100
41 ms1368 KiB
#include "prize.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; const ll linf = ll(1e18); typedef vector<int> vi; typedef vector<vi> vvi; typedef pair<int, int> p2; #define rep(i, high) for (int i = 0; i < high; i++) #define repp(i, low, high) for (int i = low; i < high; i++) #define repe(i, container) for (auto& i : container) #define sz(container) ((int)container.size()) #define all(x) begin(x),end(x) #if _LOCAL #define assert(x) if (!(x)) __debugbreak() #endif map<int, vi> cache; vi q(int i) { if (cache.find(i) != cache.end()) return cache[i]; return cache[i] = ask(i); } int find_best(int n) { int lollipop_cnt = 0; rep(i, 500) { vi res = q(i); if (res[0]+res[1]==0) { return i; } lollipop_cnt = max(lollipop_cnt, res[0] + res[1]); } int jump = 250; int i = 500; while (true) { vi base = q(i); if (base[0]+base[1]==0) { return i; } if (base[0]+base[1]==lollipop_cnt) { if (i+ jump <n) { vi b2 = q(i + jump); if (b2 == base) { i += jump; continue; } } int lo = i; int hi = min(n, i+ jump); while (lo+1<hi) { int mid = (lo + hi) / 2; vi m = q(mid); if (m == base) { lo = mid; } else hi = mid; } i = hi; } else { i++; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...