Submission #1036846

#TimeUsernameProblemLanguageResultExecution timeMemory
1036846ALeonidouThe Big Prize (IOI17_prize)C++17
100 / 100
25 ms596 KiB
#include "prize.h" #include <bits/stdc++.h> using namespace std; #define ll int #define endl "\n" #define sz(x) (ll)x.size() #define F first #define S second #define pb push_back typedef vector <ll> vi; typedef pair <ll,ll> ii; typedef vector <ii> vii; #define dbg(x) cout<<#x<<": "<<x<<endl; #define dbg2(x,y) cout<<#x<<": "<<x<<" "<<#y<<": "<<y<<endl; #define dbg3(x,y,z) cout<<#x<<": "<<x<<" "<<#y<<": "<<y<<" "<<#z<<": "<<z<<endl; void printVct(vi &v){ for (ll i =0; i<sz(v); i++){ cout<<v[i]<<" "; } cout<<endl; } ll common_val = 0; ll ans = -1; void query(ll q, vi &v, ll &s){ v = ask(q); s = v[0] + v[1]; if (s == 0){ ans = q; } } void bs(ll l, ll r, ll x, ll belowL, ll aboveR){ if (x == 0) return; if (l > r) return; if (ans != -1) return; ll mid = (l+r)/2; vi v; ll s; query(mid, v, s); if (ans != -1) return; if (s != common_val){ ll l_mid = mid-1; ll c = 1; while (l_mid >= l && s != common_val){ query(l_mid, v, s); if (ans != -1) return; if (s == common_val) break; l_mid--; c++; } if (l_mid < l){ ll val_r = x - c; bs(mid+1,r,val_r,c,aboveR); } else{ ll val_l = v[0] - belowL; ll val_r = v[1] - aboveR - c; bs(l,mid-1,val_l,belowL,v[1]); bs(mid+1,r,val_r,v[0]+c,aboveR); } } else{ ll val_l = v[0] - belowL; ll val_r = v[1] - aboveR; //hit on a common val: bs(l,mid-1,val_l,belowL,v[1]); bs(mid+1,r,val_r,v[0],aboveR); } } int find_best(int n) { //n < 5000: BF - linear search if (n <= 5000){ for (ll i =0; i<n; i++){ vi v = ask(i); ll s = v[0] + v[1]; if (s == 0){ return i; } } } //step 1: Find common value for (ll i =0; i<474; i++){ vi v = ask(i); ll s = v[0] + v[1]; common_val = max(common_val, s); if (s > 30){ break; } if (s == 0){ return i; } } // common_val = 4; //identify all uncommon one by one //start from pos = 0, and move like binary lifting bs(0, n-1, common_val, 0, 0); return ans; } /* 6 1 2 2 2 2 2 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...