Submission #103907

#TimeUsernameProblemLanguageResultExecution timeMemory
103907autumn_eelKoala Game (APIO17_koala)C++14
71 / 100
74 ms604 KiB
#include <bits/stdc++.h>
#define rep(i,n)for(int i=0;i<(n);i++)
using namespace std;

#include "koala.h"

int B[200],R[200];
int minValue(int N, int W) {
	memset(B,0,sizeof(B));
	B[0]=1;
	playRound(B,R);
	rep(i,N){
		if(B[i]>=R[i])return i;
	}
	return -1;
}

int maxValue(int N, int W) {
	rep(i,N){
		B[i]=1;
	}
	playRound(B,R);
	vector<int>v;
	rep(i,N){
		if(R[i]>1){
			v.push_back(i);
		}
	}
	while(v.size()>1){
		memset(B,0,sizeof(B));
		int ave=W/v.size();
		for(int i:v)B[i]=ave;
		playRound(B,R);
		vector<int>u;
		for(int i:v){
			if(R[i]>B[i])u.push_back(i);
		}
		v=u;
	}
	return v[0];
}

map<pair<int,int>,bool>mp;
bool cmp(int a,int b,int W=100){
	if(mp.count({a,b}))return mp[{a,b}];
	if(mp.count({b,a}))return !mp[{b,a}];
	int l=1,r=min(W/2,9);
	while(1){
		int t=(l+r)/2;
		memset(B,0,sizeof(B));
		B[a]=B[b]=t;
		playRound(B,R);
		bool f0=(B[a]<R[a]),f1=(B[b]<R[b]);
		if(f0^f1){
			if(f0)return mp[{a,b}]=0;
			return mp[{a,b}]=1;
		}
		if(!f0)r=t-1;
		else l=t+1;
	}
}
bool cmp2(int a,int b,int W){
	if(a==-1)return 0;
	if(b==-1)return 1;
	if(mp.count({a,b}))return mp[{a,b}];
	if(mp.count({b,a}))return !mp[{b,a}];
	memset(B,0,sizeof(B));
	B[a]=B[b]=W/2;
	playRound(B,R);
	return mp[{a,b}]=(B[a]>=R[a]);
}
int greaterValue(int N, int W) {
	mp.clear();
	if(cmp(0,1,W))return 1;
	return 0;
}

void allValues(int N, int W, int *P) {
	if (W == 2*N) {
		mp.clear();
		vector<int>v;
		rep(i,N)v.push_back(i);
		stable_sort(v.begin(),v.end(),[&](int a,int b){return cmp2(a,b,W);});
		rep(i,v.size()){
			if(v[i]!=-1)P[v[i]]=i+1;
		}
	}
	else {
		mp.clear();
		vector<int>v;
		rep(i,N)v.push_back(i);
		sort(v.begin(),v.end(),[&](int a,int b){return cmp(a,b,W);});
		rep(i,v.size()){
			P[v[i]]=i+1;
		}
	}
}

Compilation message (stderr)

koala.cpp: In function 'void allValues(int, int, int*)':
koala.cpp:2:30: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define rep(i,n)for(int i=0;i<(n);i++)
                              ^
koala.cpp:84:3: note: in expansion of macro 'rep'
   rep(i,v.size()){
   ^~~
koala.cpp:2:30: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define rep(i,n)for(int i=0;i<(n);i++)
                              ^
koala.cpp:93:3: note: in expansion of macro 'rep'
   rep(i,v.size()){
   ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...