제출 #937291

#제출 시각아이디문제언어결과실행 시간메모리
937291snpmrnhlol커다란 상품 (IOI17_prize)C++17
97.65 / 100
37 ms3196 KiB
#include "prize.h" #include <bits/stdc++.h> using namespace std; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const int K = 500; const int N = 2e5; const int L = 5000; const int mod = 998244353; set <int> s; int l2[N],r2[N]; int cnt = 0; int mx = 0; int qcount = 0; int ans = -1; int seed = 17; int f(){ return rng()%mod; seed = 1ll*seed*seed%mod; return seed; } vector<int> ask2(int x){ if(l2[x] == 0 && r2[x] == 0){ auto nr = ask(x); l2[x] = nr[0]; r2[x] = nr[1]; } return {l2[x],r2[x]}; } void solve(int l,int r,int dl,int dr){ if(dl + dr >= mx)return; if(l > r)return; int mij = (l + r)/2; for(int i = mij;i <= r;i++){ auto x = ask2(i); if(x[0] + x[1] == mx){ x[0]-=dl; x[1]-=dr; solve(i + 1,r,x[0] + dl,dr); if(ans != -1)return; solve(l,mij - 1,dl,dr + x[1] + i - mij); return; }else{ if(x[0] + x[1] == 0){ ans = i; return; } } } solve(l,mij - 1,dl,dr); return; } int find_best(int n) { for(int i = 0;i < K;i++){ int id = f()%n; //cout<<id<<'\n'; auto x = ask2(id); int nr = x[0] + x[1]; if(nr == 0)return id; if(nr > mx){ mx = nr; cnt = 1; }else if(nr == mx){ cnt++; } } solve(0,n - 1,0,0); return ans; } /** 8 3 3 3 3 2 2 2 1 **/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...