Submission #559737

#TimeUsernameProblemLanguageResultExecution timeMemory
559737jamezzz커다란 상품 (IOI17_prize)C++17
0 / 100
35 ms32076 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){
	if(good==0)return;
	if(v.size()==0)return;
	
	int m=v.size()/2;
	
	vector<int> idk;
	for(int i:v){
		if(memo[i][0]!=-1&&memo[i][0]+memo[i][1]==worst)idk.push_back(i);
	}
	//for(int i:idk)printf("%d ",i);printf("\n");
	if(idk.size()!=0)m=idk[idk.size()/2];
	
	int s=m;
	while(m<v.size()){
		vector<int> res=myask(v[m]);
		if(res[0]+res[1]==0){
			ans=v[m];return;
		}
		if(res[0]+res[1]==worst){
			int mid=m-s;
			vector<int> l,r;
			for(int i=0;i<s-1;++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,lgood,res[1]+mid);
			dnc(r,res[1]-mid-rgood,res[0]+mid,rgood);
			return;
		}
		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:28:9: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   28 |  while(m<v.size()){
      |        ~^~~~~~~~~
prize.cpp:37:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   37 |    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...