Submission #559722

#TimeUsernameProblemLanguageResultExecution timeMemory
559722jamezzzThe Big Prize (IOI17_prize)C++17
0 / 100
3055 ms14872 KiB
#include "prize.h"
#include <bits/stdc++.h>
using namespace std;

int ans,worst;
mt19937 rng(time(0));

vector<vector<int>> memo;
vector<int> myask(int i){
	if(memo[i][0]!=-1)return memo[i];
	return memo[i]=ask(i);
}

void dnc(vector<int> v,int good,int lgood,int rgood){
	//printf("dnc: {");
	//for(int i:v)printf("%d ",i);
	//printf("} %d %d %d\n",good,lgood,rgood);
	if(good==0)return;
	if(v.size()==0)return;
	
	int m=v.size()/2;
	int s=m;
	while(m<v.size()){
		vector<int> res=myask(m);
		if(res[0]+res[1]==0){
			ans=m;return;
		}
		if(res[0]+res[1]==worst){
			int mid=m-s;
			vector<int> l,r;
			for(int i=0;i<s;++i)l.push_back(v[i]);
			for(int i=m+1;i<v.size();++i)r.push_back(v[i]);
			dnc(l,res[0]-mid-lgood,res[0],res[1]+mid);
			dnc(r,res[1]-mid-rgood,res[0]+mid,res[1]);
		}
		else ++m;
	}
	
	vector<int> l;
	int mid=m-s;
	for(int i=0;i<s;++i)l.push_back(v[i]);
	dnc(l,good-mid,lgood,rgood+mid);
}

int find_best(int n){
	memo.resize(n);
	for(int i=0;i<n;++i)memo[i].resize(2,-1);
	
	for(int i=0;i<min(n,500);++i){
		int x=rng()%n;
		vector<int> res=myask(x);
		worst=max(worst,res[0]+res[1]);
		if(res[0]+res[1]==0)return x;
	}
	
	vector<int> v;
	for(int i=0;i<n;++i)v.push_back(i);
	
	dnc(v,worst,0,0);
	return ans;
}

Compilation message (stderr)

prize.cpp: In function 'void dnc(std::vector<int>, int, int, int)':
prize.cpp:23:9: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   23 |  while(m<v.size()){
      |        ~^~~~~~~~~
prize.cpp:32:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   32 |    for(int i=m+1;i<v.size();++i)r.push_back(v[i]);
      |                  ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...