Submission #1064185

#TimeUsernameProblemLanguageResultExecution timeMemory
1064185IgnutToy Train (IOI17_train)C++17
5 / 100
5 ms1116 KiB
// Ignut #include <bits/stdc++.h> using namespace std; using ll = long long; const int N = 5555; int n, m; vector<int> a, r; vector<int> g[N]; bool ans = false; int used[N]; bool good[N]; void dfs(int v) { used[v] = true; ans |= good[v]; if (ans) return; for (int to : g[v]) if (!used[to]) dfs(to); } void dfs1(int v, int st) { if (good[st]) return; used[v] = true; for (int to : g[v]) { if (to == st) { good[st] = true; return; } if (!used[to]) dfs1(to, st); } } void dfs2(int v, int st) { if (good[st]) return; used[v] = true; for (int to : g[v]) { if (r[to] == 1) continue; if (to == st) { good[st] = true; return; } if (!used[to]) dfs2(to, st); } } vector<int> who_wins(vector<int> A, vector<int> R, vector<int> u, vector<int> v) { n = A.size(), m = u.size(); a = A, r = R; bool canLoop[n] = {}; bool canRight[n] = {}; for (int i = 0; i < m; i ++) { if (v[i] == u[i]) canLoop[u[i]] = true; if (v[i] == u[i] + 1) canRight[u[i]] = true; } vector<int> res; for (int s = 0; s < n; s ++) { int v = s; bool ans; while (true) { if (!canRight[v]) { ans = (r[v] == 1); break; } if (canLoop[v] && r[v] && a[v]) { ans = true; break; } if (canLoop[v] && !r[v] && !a[v]) { ans = false; break; } v ++; } res.push_back(ans); } return res; }
#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...