//#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!=sum)
{
lamp=br+exl+exr+1000000;
lamp=r+1000000;
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(l,(l+r)/2-1,a[0]-exl-dist,exl,a[1]+dist);
rec(mid+1,r,a[1]-exr,a[0],exr);
}
else
{
rec(l,mid-1,a[0]-exl,exl,a[1]);
}
}
int find_best(int N)
{
n=N+1;
rf=N+1;
prec();
rec(1,n,sum,0,0);
return lamp-1;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |