제출 #431291

#제출 시각아이디문제언어결과실행 시간메모리
431291Belgutei커다란 상품 (IOI17_prize)C++17
20 / 100
86 ms308 KiB
#include "prize.h"
#include<bits/stdc++.h>

using namespace std;

#define ll long long
#define ff first
#define ss second
#define pb push_back
#define mk make_pair

vector<int> v; 
int ans,mx;

void solve(int k){
	for(int i=0; i<k; i++){
		vector<int> vv;
		vv=ask(i);
		if(vv[0]==0 && vv[1]==0){
			ans=i;
			break;
		}
	}
}

void dfs(int x, int y){
	if(x>y) return;
	vector<int> v1;
	vector<int> v2;
	v1=ask(x);
	if(x==y){
		if(v1[0]+v1[1]!=mx) v.pb(x);
		return;
	}
	v2=ask(y);
	int a=v1[0];
	int b=v1[1];
	int c=v2[0];
	int d=v2[1];
	if(a+b==mx && c+d==mx){
		if(c-a==0 || x==y) return;
		int mid=(x+y)/2;
		dfs(x+1,mid);
		dfs(mid+1,y);
	}
	else{
		if(a+b<mx && c+d<mx){
			v.pb(x);
			v.pb(y);
			dfs(x+1,y-1);
			return;
		}
		if(a+b<mx){
			v.pb(x);
			dfs(x+1,y);
			return;
		}
		v.pb(y);
		dfs(x,y-1);
	}
}

int find_best(int n) {
	if(n<=5000){
		solve(n);
		return ans;
	}
	for(int i=0; i<min(500,n); i++){
		vector<int> vv;
		vv=ask(i);
		mx=max(mx,vv[0]+vv[1]);
	}
	int l=0;
	int r=n-1;
	dfs(l,r);
	for(int i=0; i<v.size(); i++){
		vector<int> vv;
		vv=ask(v[i]);
		if(vv[0]==0 && vv[1]==0){
			return v[i];
		}
	}
	return ans;
}

컴파일 시 표준 에러 (stderr) 메시지

prize.cpp: In function 'int find_best(int)':
prize.cpp:76:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   76 |  for(int i=0; i<v.size(); i++){
      |               ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...