Submission #248980

#TimeUsernameProblemLanguageResultExecution timeMemory
248980MarcoMeijerToy Train (IOI17_train)C++14
15 / 100
2090 ms1368 KiB
#include "train.h" #include <bits/stdc++.h> using namespace std; //macros typedef long long ll; typedef pair<int, int> ii; typedef pair<ll, ll> lll; typedef tuple<int, int, int> iii; typedef vector<int> vi; typedef vector<ii> vii; typedef vector<iii> viii; typedef vector<ll> vll; typedef vector<lll> vlll; #define REP(a,b,c) for(int a=int(b); a<int(c); a++) #define RE(a,c) REP(a,0,c) #define RE1(a,c) REP(a,1,c+1) #define REI(a,b,c) REP(a,b,c+1) #define REV(a,b,c) for(int a=int(c-1); a>=int(b); a--) #define INF 1e9 #define pb push_back #define fi first #define se second #define sz size() const int MX=6000; int n, m; vi a, r, u, v; vi res; vi adj[MX]; int path[MX]; bool isLoop(int u, int start) { if(r[u]) return true; if(u == start) return false; return isLoop(adj[u][path[u]], start); } bool winner(int u) { if(a[u]) { // try to charge station bool ans = 0; RE(i,adj[u].sz) { path[u] = i; if(path[adj[u][i]] != -1) { if(isLoop(adj[u][i], u) == 1) { ans = 1; break; } } else if(winner(adj[u][i]) == 1) { ans = 1; break; } } path[u] = -1; return ans; } else { // try to run out of energy bool ans = 1; RE(i,adj[u].sz) { path[u] = i; if(path[adj[u][i]] != -1) { if(isLoop(adj[u][i], u) == 0) { ans = 0; break; } } else if(winner(adj[u][i]) == 0) { ans = 0; break; } } path[u] = -1; return ans; } } vi who_wins(vi A, vi R, vi U, vi V) { a = A; r = R; u = U; v = V; n = a.size(); m = u.size(); res.resize(n); RE(i,m) adj[u[i]].pb(v[i]); RE(i,n) { RE(i,n) path[i] = -1; res[i] = winner(i); } 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...