Submission #133771

#TimeUsernameProblemLanguageResultExecution timeMemory
133771dvdg6566장난감 기차 (IOI17_train)C++14
5 / 100
9 ms1656 KiB
#include "train.h" #include<bits/stdc++.h> using namespace std; typedef vector<int> vi; typedef pair<int,int> pi; typedef vector<pi> vpi; #define f first #define s second #define lb lower_bound #define ub upper_bound #define pb emplace_back #define mp make_pair #define MAXN 5010 #define SZ(x) (int)x.size() #define ALL(x) x.begin(),x.end() vi safe; int V[MAXN][2]; int memo[MAXN]; int N; int A[MAXN],R[MAXN]; int ask(int x){ if (memo[x] != -1)return memo[x]; if (x == N-1){ // Must be a self edge return memo[x] = R[x]; } if (A[x]){ // Can choose if (V[x][0]){ if (R[x])return memo[x] = 1; } if (V[x][1]){ if (ask(x+1))return memo[x]=1; } return memo[x] = 0; } if (!A[x]){ if (V[x][0]){ if (!R[x])return memo[x] = 0; } if (V[x][1]){ if (!ask(x+1))return memo[x]=0; } return memo[x] = 1; } return -1; } std::vector<int> who_wins(std::vector<int> a, std::vector<int> r, std::vector<int> u, std::vector<int> v) { N = SZ(a); safe.resize(N,0); memset(memo,-1,sizeof(memo)); for (int i=0;i<N;++i)A[i] = a[i]; for (int i=0;i<N;++i)R[i] = r[i]; // for (int i=0;i<N;++i)assert(a[i]==0); int M = SZ(u); for (int i=0;i<M;++i){ V[u[i]][v[i]-u[i]] = 1; assert(u[i] == v[i] || u[i] + 1 == v[i]); } for (int i=0;i<N;++i){ safe[i] = ask(i); } return safe; }
#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...