제출 #1238354

#제출 시각아이디문제언어결과실행 시간메모리
1238354vivkostov커다란 상품 (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=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);
        lamp=dist;
        return;
        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,n-sum,0,0);
        return lamp-1;
    }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...