Submission #75821

#TimeUsernameProblemLanguageResultExecution timeMemory
75821faustaadpKoala Game (APIO17_koala)C++17
87 / 100
74 ms828 KiB
#include "koala.h" #include<bits/stdc++.h> #define ll long long #define pb push_back #define mp make_pair #define fi first #define se second using namespace std; ll i; int minValue(int N, int W) { int a[110],b[110]; for(i=0;i<N;i++) a[i]=0; a[0]=1; playRound(a,b); for(i=0;i<N;i++) if(b[i]==0) return i; return 0; } int maxValue(int N, int W) { ll VS,K; int a[110],b[110]; vector<ll> v; for(i=0;i<N;i++) v.pb(i); VS=N; K=1; while(VS>1) { vector<ll> vv; for(i=0;i<N;i++) a[i]=0; K=W/VS; for(i=0;i<VS;i++) a[v[i]]=K; playRound(a,b); for(i=0;i<N;i++) if(b[i]>K) vv.pb(i); v=vv; VS=v.size(); } return v[0]; } ll L,R,C; int greaterValue(int N, int W) { int a[110],b[110]; for(i=0;i<N;i++) a[i]=0; L=1; R=min(14,N/2); while(L<=R) { C=(L+R)/2; a[0]=C; a[1]=C; playRound(a,b); //cout<<i<<" "<<b[0]<<" "<<b[1]<<"\n"; if(b[0]>b[1])return 0; if(b[0]<b[1])return 1; if(b[0]>C)L=C+1; else R=C-1; } return 0; } bool gol (ll aa,ll bb,ll cc,ll dd) { if((cc-bb)>dd) return 1; while(1) { if(cc<=dd)return 0; ll ii,H=0; for(ii=bb;ii>=bb-dd;ii--) H+=max(ii,0LL); if(H<aa)return 1; bb-=(dd+1); cc-=(dd+1); } } void allValues(int N, int W, int *P) { if (W == 2*N) { ll VS,K; int a[110],b[110],sud[110]; for(i=0;i<N;i++) sud[i]=0; ll j; for(j=N-1;j>=0;j--) { vector<ll> v; for(i=0;i<N;i++) if(!sud[i]) v.pb(i); VS=j+1; K=2; while(VS>1) { vector<ll> vv; for(i=0;i<N;i++) a[i]=0; K=W/VS; for(i=0;i<VS;i++) a[v[i]]=K; playRound(a,b); for(i=0;i<N;i++) if(b[i]>K&&a[i]==K) vv.pb(i); v=vv; VS=v.size(); } sud[v[0]]=1; P[v[0]]=j+1; } } else { ll VS,K; int a[110],b[110],sud[110]; for(i=0;i<N;i++) sud[i]=0; ll j,TTT=0; for(j=N-1;j>=0;j--) { vector<ll> v; for(i=0;i<N;i++) if(!sud[i]) v.pb(i); VS=j+1; K=1; while(VS>1) { vector<ll> vv; for(i=0;i<N;i++) a[i]=0; K=1; for(i=(W/VS);i>=0;i--) if(gol(j+1,j+1-VS,(W-(N-(j+1))),i)) { K=i; break; } for(i=0;i<VS;i++) a[v[i]]=K; // cout<<j<<" "<<VS<<" "<<K<<"\n"; playRound(a,b); for(i=0;i<N;i++) if(b[i]>K&&a[i]==K) vv.pb(i); if(vv.empty()) { // cout<<j<<"\n"; TTT++; K--; continue; } K=N/VS; //cout<<K<<"\n"; v=vv; VS=v.size(); } if(VS==0) { cout<<"ADUIUIDUSUSDUI\n\n\n\n\nASDJISDIH\n"; } sud[v[0]]=1; P[v[0]]=j+1; } // cout<<TTT<<"\n"; } }
#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...