Submission #1218361

#TimeUsernameProblemLanguageResultExecution timeMemory
1218361brintonComparing Plants (IOI20_plants)C++20
0 / 100
0 ms328 KiB
#include "plants.h" #include <bits/stdc++.h> using namespace std; vector<array<int,3>> v;// round,group,groudIdx; void init(int k, vector<int> r) { int N = r.size(); v.resize(N); vector<bool> vis(N,false); int gt = N; while(true){ vector<int> cur; for(int i = 0;i < N;i++){ if(vis[i]) continue; if(r[i] == 0) cur.push_back(i); } if(cur.size() == 0) break; for(auto &i:cur) vis[i] = true; gt--;// start a new group for(auto &i:cur){ for(int d = 1;d < k;d++){ r[(i-d+N)%N]--; } } if(cur.size() == 1){ v[cur[0]] = {gt,0,0}; continue; } vector<int> start; if(N-cur.back()+cur[0] >= k) start.push_back(cur[0]); for(int i = 1;i < cur.size();i++){ if(i == 0){ continue; } if(cur[i]-cur[i-1] >= k) start.push_back(cur[i]); } assert(start.size() == 1); // move the front to back; int cidx = 0; while(cur[cidx] != start[0]) { cur.push_back(cidx); cidx++; } int cg = -1; int gidx = 0; for(int i = cidx;i < cur.size();i++){ if(cg+1 < start.size() && start[cg+1] == cur[i]){ cg++; gidx = 0; } v[cur[i]] = {gt,cg,gidx}; gidx--; } } // for(auto [a,b,c]:v){ // cout << a << " " << b << " " << c << endl; // } } int compare_plants(int x, int y) { if(v[x] > v[y]){ return 1; }else{ return -1; } auto [xgt,xgp,xgidx] = v[x]; auto [ygt,ygp,ygidx] = v[y]; if(xgt > ygt){ return 1; }else if(xgt < ygt){ return -1; }else{ if(xgp == ygp){ if(xgidx > ygidx){ return 1; }else if(xgidx < ygidx){ 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...