Submission #63633

#TimeUsernameProblemLanguageResultExecution timeMemory
63633jangwonyoungKoala Game (APIO17_koala)C++14
100 / 100
105 ms852 KiB
#include "koala.h" #include<iostream> #include<algorithm> #include<cassert> using namespace std; int B[100],R[100]; int mi[100],ma[100]; int n=100; void init(){ for(int i=0; i<n ;i++) B[i]=0,mi[i]=1,ma[i]=100; } int sum(int l,int r){ if(l>r) return 0; return (r+l)*(r-l+1)/2; } int f(int l,int r,int w){ int minv=r-l+1; int ans=0; for(int i=0; i<=w/(r-l+1) ;i++){ int val=sum(1,n)-sum(l,r); int best=0; for(int j=1; j<=r-l+1 ;j++){ if((i+1)*j+n-r>w) break; int cv=sum(r+1,n)+sum(r-j+1,r)+sum(max(1,l-(w-((i+1)*j+n-r))),l-1); if(cv>val ||( cv>=val && best!=0)){ val=cv; best=j; } } if(best!=0 && best<minv){ minv=best; ans=i; } } return ans; } int play(int l,int r,int v){ for(int i=0; i<n ;i++){ if(mi[i]!=l) B[i]=0; else B[i]=v; } playRound(B,R); int cnt=0; for(int i=0; i<n ;i++){ if(mi[i]!=l) continue; if(R[i]>v) cnt++; } for(int i=0; i<n ;i++){ if(mi[i]!=l) continue; if(R[i]>v) mi[i]=r-cnt+1; else ma[i]=r-cnt; } return cnt; } int minValue(int N, int W) { init(); B[0]=1; playRound(B,R); for(int i=0; i<n ;i++) if(R[i]==0) return i; } int maxValue(int N, int W) { init(); int l=1,r=n; while(l!=n){ l=r-play(l,r,f(l,r,W))+1; } for(int i=0; i<n ;i++) if(mi[i]==n) return i; } int greaterValue(int N, int W) { init(); B[0]=B[1]=4; playRound(B,R); if(R[0]!=R[1]) return (R[0]==0); if(R[0]==0){ B[0]=B[1]=2; playRound(B,R); if(R[0]!=R[1]) return (R[0]==0); B[0]=B[1]=1; playRound(B,R); if(R[0]!=R[1]) return (R[0]==0); } else{ B[0]=B[1]=8; playRound(B,R); if(R[0]!=R[1]) return (R[0]==0); } return 0; } void solve(int l,int r){ if(l==r) return; int num=play(l,r,f(l,r,100)); solve(l,r-num); solve(r-num+1,r); } bool cmp(int x,int y){ for(int i=0; i<n ;i++) B[i]=0; B[x]=B[y]=100; playRound(B,R); return (R[y]>100); } void allValues(int N, int W, int *P) { init(); if (W == 2*N) { for(int i=0; i<100 ;i++) ma[i]=i; stable_sort(ma,ma+100,cmp); for(int i=0; i<100 ;i++) P[ma[i]]=i+1; } else { solve(1,n); for(int i=0; i<n ;i++) P[i]=mi[i]; } }

Compilation message (stderr)

koala.cpp: In function 'int minValue(int, int)':
koala.cpp:60:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
koala.cpp: In function 'int maxValue(int, int)':
koala.cpp:68:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
#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...