Submission #899328

#TimeUsernameProblemLanguageResultExecution timeMemory
899328AdamGSKoala Game (APIO17_koala)C++17
71 / 100
63 ms600 KiB
#include "koala.h" #include<bits/stdc++.h> using namespace std; typedef long long ll; #define rep(a, b) for(int a = 0; a < (b); ++a) #define st first #define nd second #define pb push_back #define all(a) a.begin(), a.end() int minValue(int N, int W) { int P[N], T[N]; rep(i, N) P[i]=0; P[0]=1; playRound(P, T); rep(i, N) if(P[i]>=T[i]) return i; return 0; } int maxValue(int N, int W) { int P[N], T[N]; vector<int>V(N); rep(i, N) V[i]=0; int ans=-1; while(true) { int ile=N; rep(i, N) if(V[i]) --ile; if(ile==1) { rep(i, N) if(!V[i]) ans=i; break; } rep(i, N) if(V[i]) P[i]=0; else P[i]=W/ile; playRound(P, T); rep(i, N) if(P[i]>=T[i]) V[i]=1; int ans=0; rep(i, N) if(!V[i]) ++ans; } return ans; } int greaterValue(int N, int W) { int P[N], T[N], po=1, ko=8; rep(i, N) P[i]=0; while(po<ko) { int sr=(po+ko)/2; P[0]=P[1]=sr; playRound(P, T); if(T[0]>sr && T[1]<=sr) return 0; if(T[0]<=sr && T[1]>sr) return 1; if(T[0]>sr) po=sr+1; else ko=sr-1; } P[0]=P[1]=po; playRound(P, T); if(T[0]<=po) return 1; return 0; } bool comp(int a, int b) { int P[100], T[100]; rep(i, 100) P[i]=0; P[a]=P[b]=100; playRound(P, T); if(T[a]<=P[a]) return true; return false; } bool comp2(int a, int b) { int N=100; int P[N], T[N], po=1, ko=8; rep(i, N) P[i]=0; while(po<ko) { int sr=(po+ko)/2; P[a]=P[b]=sr; playRound(P, T); if(T[a]>sr && T[b]<=sr) return 0; if(T[a]<=sr && T[b]>sr) return 1; if(T[a]>sr) po=sr+1; else ko=sr-1; } P[a]=P[b]=po; playRound(P, T); if(T[a]<=po) return 1; return 0; } vector<int>znajdz50() { vector<int>ans, czy(100); rep(j, 50) { int P[100], T[100]; rep(i, 100) P[i]=czy[i]; int k=j+1; rep(i, 100) if(!czy[i] && k) { P[i]=1; --k; } playRound(P, T); rep(i, 100) if(!czy[i] && P[i]>=T[i]) { czy[i]=1; ans.pb(i); } } return ans; } void allValues(int N, int W, int *P) { if (W == 2*N) { int T[N]; rep(i, N) T[i]=i; stable_sort(T, T+N, comp); rep(i, N) P[T[i]]=i+1; return; } vector<int>V=znajdz50(), odw(100); for(auto i : V) odw[i]=1; int T[50], l=0; rep(i, 100) if(!odw[i]) T[l++]=i; stable_sort(T, T+50, comp2); rep(i, 50) { P[V[i]]=i+1; P[T[i]]=i+51; } }
#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...