제출 #292860

#제출 시각아이디문제언어결과실행 시간메모리
292860shayan_p커다란 상품 (IOI17_prize)C++17
20 / 100
68 ms504 KiB
// Oh damn! Suddenly you're free to fly... #include<bits/stdc++.h> #include "prize.h" #define F first #define S second #define PB push_back #define sz(s) int((s).size()) #define bit(n,k) (((n)>>(k))&1) using namespace std; typedef long long ll; typedef pair<int,int> pii; const int maxn = 2e5 + 10, SQ = 1000, mod = 1e9 + 7, inf = 1e9 + 10; int MX; int CNT = 0; pii ASK(int pos){ assert(++CNT <= 10000); vector<int> v = ask(pos); if(v[0] == 0 && v[1] == 0) throw pos; return {v[0], v[1]}; } void go(int l, int r){ if(r-l <= 0) return; int mid = (l+r) >> 1; pii p = ASK(mid); if(p.F + p.S == MX){ if(p.S > 0) go(mid+1, r); if(p.F > 0) go(l, mid); return; } int pos = mid + 1; while(pos < r){ pii p = ASK(pos); if(p.F + p.S != MX){ pos++; } else{ if(p.S > 0) go(pos + 1, r); break; } } pos = mid-1; while(pos >= l){ pii p = ASK(pos); if(p.F + p.S != MX){ pos--; } else{ if(p.F > 0) go(l, pos); break; } } } int ITER = 0; int find_best(int n){ assert(++ITER == 1); try{ for(int i = 0; i < SQ; i++){ pii p = ASK(i); MX = max(MX, p.F + p.S); } go(0, n); } catch(int ans){ return ans; } assert(0); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...