This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |