Submission #73354

#TimeUsernameProblemLanguageResultExecution timeMemory
73354SmsS커다란 상품 (IOI17_prize)C++17
0 / 100
119 ms452 KiB
#include<bits/stdc++.h>
using namespace std;
#define for2(a,b,c) for(int a = b; a < c; a++)
#include "prize.h"

const bool test = 0;

int mn;
int cnt = 0;

int solve(int l,int r,vector<int> L,vector<int> R){
//	cout << l << ' ' << r << endl;
	if(cnt >= 9000){
		//assert(0);
	}
	if(l >= r) return -1;
	if(L[1]-R[1] == (r-l-1)) return -1;
	int mid = (l+r)/2;
	vector<int> MIDL,MIDR;
	int midl;
	int midr;
	midl = midr = mid;
	midr++;
	while(1){
		MIDL = ask(midl);
		cnt++;
		if(MIDL[0]+MIDL[1] == 0) return midl;
		if(MIDL[0]+MIDL[1] != mn){
			midl--;
		}else break;
	}
	while(1){
		MIDR = ask(midr);
		cnt++;
		if(MIDR[0]+MIDR[1] == 0) return midr;
		if(MIDR[0]+MIDR[1] != mn){
			midr++;
		}else break;
	}
	int res;
	res = solve(l,midl,L,MIDL);

	if(res == -1) return solve(midr,r,MIDR,R);
	else return res;
}

int find_best(int n) {

	if(!test && n <= 5000){
		for2(i,0,n){
			vector<int> res = ask(i);
			if(res[0]+res[1] == 0) return i;
		}
	}
	mn = 0;
	srand(14);
	for2(rep,0,10){
		vector<int> res = ask(rand()%n);
		mn = max(mn,res[0]+res[1]);
	}
	int l,r;
	vector<int> L,R;
	for2(i,0,n){
		l = i;
		L = ask(i);
		cnt++;
		if(L[0]+L[1] == mn){
			break;
		}
		if(L[0]+L[1] == 0) return i;
	}
	for(int i = n-1; i >= 0; i--){
		r = i;
		R = ask(i);
		cnt++;
		if(R[0]+R[1] == mn){
			break;
		}
		if(R[0]+R[1] == 0) return i;
	}
	if(cnt >= 1000){
		assert(0);
	}
	return solve(l,r,L,R);
}

Compilation message (stderr)

prize.cpp: In function 'int find_best(int)':
prize.cpp:84:22: warning: 'r' may be used uninitialized in this function [-Wmaybe-uninitialized]
  return solve(l,r,L,R);
                      ^
prize.cpp:84:22: warning: 'l' may be used uninitialized in this function [-Wmaybe-uninitialized]
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...