Submission #919343

#TimeUsernameProblemLanguageResultExecution timeMemory
919343vnm06Koala Game (APIO17_koala)C++14
100 / 100
45 ms720 KiB
#include<bits/stdc++.h> #include "koala.h" using namespace std; int minValue(int N, int W) { int B[105], R[105]; for(int i=0; i<N; i++) B[i]=R[i]=0; B[0]=1; playRound(B, R); for(int i=1; i<N; i++) if(!R[i]) return i; return 0; } int maxValue(int N, int W) { vector<int> pos, pos2; pos.resize(N); for(int i=0; i<N; i++) pos[i]=i; int B[105], R[105]; for(int i=0; i<N; i++) B[i]=R[i]=0; while(pos.size()>1) { int k=pos.size(), v=W/k; for(int i=0; i<N; i++) B[i]=R[i]=0; for(int i=0; i<k; i++) B[pos[i]]=v; playRound(B, R); pos2.resize(0); for(int i=0; i<k; i++) { if(R[pos[i]]>B[pos[i]]) pos2.push_back(pos[i]); } pos.resize(pos2.size()); for(int i=0; i<pos.size(); i++) pos[i]=pos2[i]; } // TODO: Implement Subtask 2 solution here. // You may leave this function unmodified if you are not attempting this // subtask. return pos[0]; } int greaterValue(int N, int W) { int B[105], R[105]; for(int i=0; i<N; i++) B[i]=R[i]=0; int le=0, ri=13; while(ri-le>1) { int mid=(le+ri)/2; B[0]=B[1]=mid; playRound(B, R); if(R[0]<=B[0] && R[1]<=B[1]) ri=mid; else if(R[0]>B[1] && R[1]>B[1]) le=mid; else return R[0]<R[1]; } // TODO: Implement Subtask 3 solution here. // You may leave this function unmodified if you are not attempting this // subtask. return 0; } int find_V(int N, int br, int W) { ///cout<<N<<" "<<br<<" "<<W<<endl; for(int i=1; i<=W/br; i++) { int best=0, brbst=0; for(int j=0; j<=br; j++) { if(j*(i+1)>W) continue; int brost=W-j*(i+1); if(brost>N-br) brost=N-br; int tval=(2*N-j+1)*j/2; tval+=(2*(N-br)-brost+1)*brost/2; if(tval>best) {best=tval; brbst=j;} } ///cout<<i<<' '<<best<<" "<<brbst<<endl; if(brbst<br) return i; } } void allValues(int N, int W, int *P) { int B[105], R[105]; for(int i=0; i<N; i++) B[i]=R[i]=0; int ord[105]; int gr[105]; for(int i=0; i<N; i++) { ord[i]=i; gr[i]=0; } while(1) { int i; for(i=0; i<N-1; i++) { ///cout<<gr[i]<<" "; if(!gr[i]) break; } ///for(int i=0; i<N; i++) cout<<ord[i]<<" "; ///cout<<endl; if(i==N-1) break; int le=i; int ri=i; while(ri+1<N-1 && !gr[ri+1]) ri++; ri++; int br=ri-le+1; int v=find_V(N-le, br, W-le); ///cout<<v<<endl; for(int i=0; i<N; i++) B[i]=0; for(int j=le; j<=ri; j++) B[ord[j]]=v; playRound(B, R); for(int j=le; j<=ri; j++) { if(B[ord[j]]<R[ord[j]]) { /// cout<<j<<" "<<le<<endl; swap(ord[j], ord[le]); le++; } } gr[le-1]=1; /// cout<<lst<<"Smqna"<<" "<<le-1<<endl; } for(int i=0; i<N; i++) P[ord[i]]=N-i; }

Compilation message (stderr)

koala.cpp: In function 'int maxValue(int, int)':
koala.cpp:33:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   33 |         for(int i=0; i<pos.size(); i++) pos[i]=pos2[i];
      |                      ~^~~~~~~~~~~
koala.cpp: In function 'int find_V(int, int, int)':
koala.cpp:78:1: warning: control reaches end of non-void function [-Wreturn-type]
   78 | }
      | ^
#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...