Submission #778542

#TimeUsernameProblemLanguageResultExecution timeMemory
778542I_Love_EliskaM_Toy Train (IOI17_train)C++14
16 / 100
787 ms1512 KiB
#include "train.h" #include <bits/stdc++.h> using namespace std; #define forn(i,n) for(int i=0;i<n;++i) #define pb push_back #define ll long long vector<int> p1(vector<int>a,vector<int>r,vector<int>u,vector<int>v) { int n=a.size(), m=u.size(); vector<int> s(n); vector<int> f(n); vector<int> ans(n); forn(i,m) if (u[i]==v[i]) s[u[i]]=1; forn(i,m) if (u[i]!=v[i]) f[u[i]]=1; int now=0; for (int i=n-1; i>=0; --i) { if (s[i]) { if (now) { if (!a[i]) { if (!r[i]) now=0; } else { if (f[i]) now=1; else now = r[i]; } } else { if (a[i]) { if (r[i]) now=1; } else { if (f[i]) now=0; else now = r[i]; } } } ans[i]=now; } return ans; } const int N=5555; vector<int> adj[N]; int vis[N]; int ok[N]; int dfs(int u, int s) { if (vis[u] && u==s) return 1; if (vis[u]) return 0; vis[u]=1; int z=0; for(auto&v:adj[u]) z|=dfs(v,s); return z; } int dfs2(int u) { if (ok[u]) return 1; if (vis[u]) return 0; vis[u]=1; int z=0; for(auto&v:adj[u]) z|=dfs2(v); return z; } vector<int> p3(vector<int>a,vector<int>r,vector<int>u,vector<int>v) { int n=a.size(), m=u.size(); vector<int> ans(n); forn(i,m) adj[u[i]].pb(v[i]); forn(i,n) if (r[i]) { forn(j,n) vis[j]=0; int q=dfs(i,i); ok[i]=q; } forn(i,n) { forn(j,n) vis[j]=0; int q=dfs2(i); ans[i]=q; } return ans; } int no[N]; int dfs3(int u) { if (vis[u]) return 1; vis[u]=1; int z=0; for(auto&v:adj[u]) if (!no[v]) z|=dfs3(v); return z; } void dfs4(int u) { if (vis[u]) return; vis[u]=1; for(auto&v:adj[u]) { dfs4(v); ok[u]|=ok[v]; } } vector<int> p4(vector<int>a,vector<int>r,vector<int>u,vector<int>v) { int n=a.size(), m=u.size(); vector<int> ans(n); forn(i,m) adj[u[i]].pb(v[i]); forn(i,n) no[i]=r[i]; forn(i,n) { forn(j,n) vis[j]=0; ok[i]=dfs3(i); } forn(i,n) { forn(j,n) vis[j]=0; dfs4(i); } forn(i,n) ans[i]=!ok[i]; return ans; } vector<int> who_wins(vector<int>a,vector<int>r,vector<int>u,vector<int>v) { int n=a.size(), m=u.size(); int z=1; forn(i,m) z&=(u[i]==v[i]) || (v[i]==(u[i]+1)); if (z) { return p1(a,r,u,v); } z=1; forn(i,n) z&=a[i]; if (z) return p3(a,r,u,v); forn(i,n) z|=a[i]; if (!z) return p4(a,r,u,v); exit(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...