Submission #1090287

#TimeUsernameProblemLanguageResultExecution timeMemory
1090287alexander707070Koala Game (APIO17_koala)C++14
37 / 100
85 ms1112 KiB
#include<bits/stdc++.h> #define MAXN 107 #include "koala.h" using namespace std; int b[MAXN],r[MAXN],Ws; int minValue(int N, int W) { b[0]=1; playRound(b,r); for(int i=0;i<N;i++){ if(r[i]==0)return i; } return 0; } vector<int> can,best; void reset(){ best.clear(); can.clear(); for(int i=0;i<100;i++)b[i]=0; } int maxValue(int N, int W) { reset(); for(int i=0;i<100;i++)can.push_back(i); while(can.size()>1){ for(int i=0;i<100;i++)b[i]=0; for(int i:can){ b[i]=W/int(can.size()); } playRound(b,r); for(int i:can){ if(r[i]>b[i])best.push_back(i); } can=best; best={}; } return can[0]; } int from[MAXN],to[MAXN]; bool compare(int x,int y){ for(int i=0;i<100;i++)b[i]=0; int ll=0,rr=10,tt; while(ll+1<rr){ tt=(ll+rr)/2; b[x]=b[y]=tt; playRound(b,r); if(r[x]<=tt and r[y]<=tt){ rr=tt; }else if(r[x]>tt and r[y]>tt){ ll=tt; }else{ if(r[x]>=tt)return false; else return true; } } return false; } int greaterValue(int N, int W) { if(compare(0,1))return 1; else return 0; } int ans[107][107]; int calc(int l,int r){ int rest=(r-l+1); vector< pair<int,int> > poten; for(int i=1;i<=Ws/(r-l+1);i++){ int z=rest/(i+1); if(z>=r-l+1)continue; rest%=(i+1); int curr=r-z,rem=0,pt=1; while(rest<i+1 and rem<curr and pt<l){ rem+=pt; pt++; rest++; if(rem<=curr and rest==i+1){ rest=0; rem-=curr; curr--; z++; } } if(z>=r-l+1)continue; poten.push_back({abs((r-l+1)/2-z),i}); } sort(poten.begin(),poten.end()); return poten[0].second; } vector<int> solve(vector<int> w,int mins){ if(w.size()<=1)return w; int pivot=calc(mins,mins+w.size()-1); for(int i=0;i<100;i++)b[i]=0; for(int i:w)b[i]=pivot; playRound(b,r); vector<int> ll,rr; for(int i:w){ if(r[i]>pivot){ rr.push_back(i); }else{ ll.push_back(i); } } ll=solve(ll,mins); rr=solve(rr,mins+ll.size()); vector<int> res; for(int i:ll)res.push_back(i); for(int i:rr)res.push_back(i); return res; } vector<int> s; void allValues(int N, int zw, int *P) { s={}; Ws=zw; for(int i=0;i<100;i++){ s.push_back(i); } s=solve(s,1); for(int i=0;i<N;i++){ P[s[i]]=i+1; } }
#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...