Submission #866177

#TimeUsernameProblemLanguageResultExecution timeMemory
866177andrei_boacaComparing Plants (IOI20_plants)C++17
19 / 100
4056 ms20760 KiB
#include "plants.h" #include <bits/stdc++.h> //#include "grader.cpp" using namespace std; typedef long long ll; vector<int> muchii[200005]; int n,bigger[200005],smaller[200005],lastsmall[200005],lastbig[200005],k,v[200005]; bool use[200005]; ll mars[500005],can[500005]; int dist(int a,int b) { return (b-a+n)%n; } int myprv(int x) { return (x-1+n)%n; } void init(int K, std::vector<int> r) { n=r.size(); k=K; for(int i=0;i<n;i++) { lastbig[i]=-1; lastsmall[i]=-1; } for(int i=0;i<n;i++) { if(r[i]==0) { int j=(i-1+n)%n; while(r[j]==1) { lastsmall[j]=i; j=(j-1+n)%n; } } if(r[i]==1) { int j=(i-1+n)%n; while(r[j]==0) { lastbig[j]=i; j=(j-1+n)%n; } } } if(k>2) { for(int value=1;value<=n;value++) { vector<int> vals; for(int i=0;i<=2*n;i++) { mars[i]=0; can[i]=0; } for(int j=0;j<n;j++) if(!use[j]) { if(r[j]==k-1) { mars[j+1]++; mars[j+k]--; } else can[j]++; } ll valmin=1e16; for(int j=0;j<2*n;j++) { if(j>0) mars[j]+=mars[j-1]; can[j%n]+=mars[j]; } for(int j=0;j<n;j++) valmin=min(valmin,can[j]); for(int j=0;j<n;j++) if(can[j]==valmin&&!use[j]) vals.push_back(j); if(vals.empty()) break; for(int who:vals) { use[who]=1; v[who]=value; for(int j=myprv(who),cnt=1;cnt<k;cnt++,j=myprv(j)) r[j]++; } } } } int compare_plants(int x, int y) { if(k==2) { if(lastsmall[x]!=-1&&dist(x,y)+dist(y,lastsmall[x])==dist(x,lastsmall[x])) return -1; if(lastbig[x]!=-1&&dist(x,y)+dist(y,lastbig[x])==dist(x,lastbig[x])) return 1; if(lastsmall[y]!=-1&&dist(y,x)+dist(x,lastsmall[y])==dist(y,lastsmall[y])) return 1; if(lastbig[y]!=-1&&dist(y,x)+dist(x,lastbig[y])==dist(y,lastbig[y])) return -1; return 0; } if(v[x]<v[y]) return -1; if(v[x]>v[y]) return 1; return 0; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...