Submission #1202987

#TimeUsernameProblemLanguageResultExecution timeMemory
1202987notmeComparing Plants (IOI20_plants)C++20
0 / 100
35 ms7996 KiB
#include "plants.h" #include <bits/stdc++.h> #define pb push_back using namespace std; const int maxn = 2e5 + 10; vector < int > g[maxn]; /// higher -> lower vector < int > path; int used[maxn]; void dfs(int beg) { used[beg] = 1; for (auto nb: g[beg]) { if(used[nb])continue; dfs(nb); } path.pb(beg); } int hi[maxn]; int val[maxn]; void init(int k, std::vector<int> r) { int n = r.size(); if(k == 2) { int nxt = 0; for (int i = 0; i < n; ++ i) { nxt = i + 1; nxt %= n; if(r[i] == 1)g[nxt].pb(i); else g[i].pb(nxt); } } else if(2*k > n) { int nxt = n - k; for (int i = 0; i < n; ++ i) { if(r[i] > r[nxt])g[nxt].pb(i); else if(r[i] < r[nxt])g[i].pb(nxt); else cout << "greshno" << endl; nxt ++; nxt %= n; } } for (int i = 0; i < n; ++ i) { for (auto lo: g[i]) hi[lo] = 1; } for (int i = 0; i < n; ++ i) { if(hi[i])continue; dfs(i); } reverse(path.begin(), path.end()); int currv = n; for (auto v: path) { currv --; val[v] = currv; } return; } int compare_plants(int x, int y) { if(val[x] > val[y])return 1; else return -1; /* memset(used, 0, sizeof(used)); dfs(x); if(used[y])return 1; memset(used, 0, sizeof(used)); dfs(y); if(used[x])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...