Submission #303343

#TimeUsernameProblemLanguageResultExecution timeMemory
303343Utaha식물 비교 (IOI20_plants)C++14
14 / 100
4067 ms5316 KiB
#include "plants.h" #include<bits/stdc++.h> using namespace std; const int maxn = 200005; #define REP(i,n) for(int i=0;i<(n);i++) #define eb emplace_back #define pb push_back #define SZ(a) ((int)a.size()) #define ALL(a) a.begin(),a.end() int n,k; bool vis[maxn]; int a[maxn]; int find_ans(vector<int> v){ sort(ALL(v)); v.pb(v[0]+n); REP(i,SZ(v)-1){ if(v[i+1]>=v[i]+k) return v[i+1]%n; } assert(0); return -1; } void init(int _k, std::vector<int> r) { n = r.size(); k = _k; assert(k*2>n); REP(T,n){ // cout<<"T: "<<T<<endl; vector<int> idx; REP(j,n) if(!vis[j]){ if(r[j]==0) idx.pb(j); } // for(int i:idx) cout<<i<<' '; // cout<<'\n'; int t = find_ans(idx); vis[t] = 1; a[t] = n-T; REP(i,k-1){ int pre = (t-1-i+n)%n; if(!vis[pre]) r[pre]--; } } // REP(i,n) cout<<a[i]<<" \n"[i==n-1]; return; } // bool between(int idx,int l,int r){ // if(l<=idx&&idx<r) return 1; // if(l<=idx+n&&idx+n<r) return 1; // // cout<<idx<<' '<<l<<' '<<r<<endl; // return 0; // } int compare_plants(int x, int y) { // if(between(y,x,x+k)){ // if(v[x]==0) return 1; // else if(v[x] == k-1) return -1; // } // if(between(x,y,y+k)){ // if(v[y]==0) return -1; // else if(v[y] == k-1) return 1; // } // return 0; if(a[x]>a[y]) return 1; else if(a[y]>a[x]) return -1; else 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...