제출 #800253

#제출 시각아이디문제언어결과실행 시간메모리
800253PixelCat식물 비교 (IOI20_plants)C++14
14 / 100
4070 ms5580 KiB
#include "plants.h" #ifdef NYAOWO #include "grader.cpp" #endif #include <bits/stdc++.h> #define For(i, a, b) for(int i = a; i <= b; i++) #define Forr(i, a, b) for(int i = a; i >= b; i--) #define F first #define S second #define all(x) x.begin(), x.end() #define sz(x) ((int)x.size()) #define eb emplace_back // #define int LL using namespace std; using i32 = int32_t; using LL = long long; using pii = pair<int, int>; const int MAXN = 5000; int rk[MAXN + 10]; int dist(int s, int t, int n) { if(s <= t) return t - s; else return t - s + n; } void init(int k, vector<int> r) { int n = sz(r); vector<int> alive(n, 1); int cnt = n; int rank = 0; while(cnt > 0) { rank++; vector<int> idx; For(i, 0, n - 1) if(alive[i]) { if(r[i] == 0 && (sz(idx) == 0 || dist(idx.back(), i, n) >= k)) { idx.eb(i); } } // cerr << idx << "\n"; // For(i, 0, n - 1) cerr << r[i] << " \n"[i == n - 1]; // for(auto &i:idx) cerr << i << " "; // cerr << "\n"; reverse(all(idx)); while(sz(idx) > 1 && dist(idx[0], idx.back(), n) < k) idx.pop_back(); for(auto &i:idx) { rk[i] = rank; For(j, n - k + 1, n - 1) r[(i + j) % n]--; alive[i] = 0; cnt--; } // rk[idx] = rank; // For(i, n - k + 1, n - 1) r[(idx + i) % n]--; // alive[idx] = 0; // cnt--; } } int compare_plants(int x, int y) { if(rk[x] == rk[y]) return 0; if(rk[x] < rk[y]) return 1; return -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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...