Submission #1238338

#TimeUsernameProblemLanguageResultExecution timeMemory
1238338vivkostovThe Big Prize (IOI17_prize)C++20
0 / 100
0 ms408 KiB
//#pragma once //#include "grader.cpp" #include "prize.h" #include <bits/stdc++.h> using namespace std; mt19937 mt(time(nullptr)); int sum,lamp,n,num=20,lf,rf; void prec() { vector<int>a; int h; for(int i=1; i<=10; i++) { h=mt()%n; a=(ask(h)); sum=max(sum,a[0]+a[1]); } } void rec(int l,int r,int br,int exl,int exr) { if(lamp||br<=0||r<lf||l>rf)return; int mid=(l+r)/2,ad=1; vector<int>a; if(br+exl+exr!=n-sum) { lamp=br+exl+exr+1000000; lamp=n-sum; return; } while(true) { num++; if(num>=9995) { lamp=20000000; return; } a=ask(mid-1); if(a[0]+a[1]==0) { lamp=mid; return; } if(a[0]==0)lf=mid+1; if(a[1]==0)rf=mid-1; if(a[0]+a[1]==sum)break; mid+=ad; if(mid>r||mid>rf) { mid=(l+r)/2-1; ad=-1; } if(mid<l||mid<lf)return; } int dist=abs(mid-(l+r)/2); if(mid>=(l+r)/2) { rec(mid+1,r,a[1]-exr,a[0],exr); rec(l,(l+r)/2-1,a[0]-exl-dist,exl,a[1]+dist); } else { rec(l,mid-1,a[0]-exl,exl,a[1]); } } int find_best(int N) { n=N; rf=N; prec(); rec(1,n,n-sum,0,0); return lamp-1; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...