#include "train.h"
#include <iostream>
#include <vector>
#include <cstring>
#include <map>
#include <cassert>
using namespace std;
const int MAXN = 15;
const int B = 0;
const int A = 1;
int mask_owner, mask_charge;
int p3[MAXN];
vector<int> adj[MAXN];
map<int, int> dp[MAXN];
inline int get_bit(const int mask, const int p) {
return (mask >> p) & 1;
}
int go(int cur, int mask_state, int mask3_state, int mask_tail, int mask3_tail) {
if (dp[cur].find(mask3_state) != dp[cur].end())
return dp[cur][mask3_state];
for (int i = 0; i < (int)adj[cur].size(); i++) {
int v = adj[cur][i];
if (get_bit(mask_state, v)) {
if ((get_bit(mask_owner, cur) == A) ^ get_bit(mask_tail, v))
return dp[cur][mask3_state] = get_bit(mask_owner, cur);
} else {
int nmask3_state = mask3_state + p3[v];
int nmask_tail = mask_tail | (1 << v);
int nmask3_tail = mask3_tail + p3[v];
if (get_bit(mask_charge, v)) {
nmask3_state += nmask3_tail;
nmask_tail = 0, nmask3_tail = 0;
}
if (go(v, mask_state | (1 << v), nmask3_state, nmask_tail, nmask3_tail) == get_bit(mask_owner, cur))
return dp[cur][mask3_state] = get_bit(mask_owner, cur);
}
}
return dp[cur][mask3_state] = !get_bit(mask_owner, cur);
}
vector<int> who_wins(vector<int> a, vector<int> r, vector<int> u, vector<int> v){
if ((int)a.size() > MAXN)
return vector<int>((int)a.size(), 0);
for (int i = 0; i < (int)u.size(); i++)
adj[u[i]].push_back(v[i]);
for (int i = 0; i < (int)a.size(); i++) if (a[i] == A)
mask_owner |= (1 << i);
for (int i = 0; i < (int)r.size(); i++) if (r[i] == 1)
mask_charge = mask_charge | (1 << i);
p3[0] = 1;
for (int i = 1; i < (int)a.size(); i++)
p3[i] = p3[i-1] * 3;
vector<int> res;
for (int i = 0; i < (int)a.size(); i++)
res.push_back(get_bit(mask_charge, i) ?
go(i, (1 << i), 2 * p3[i], 0, 0) :
go(i, (1 << i), p3[i], (1 << i), p3[i]));
return res;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
3 ms |
2304 KB |
3rd lines differ - on the 14th token, expected: '1', found: '0' |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
2156 KB |
Output is correct |
2 |
Correct |
0 ms |
2024 KB |
Output is correct |
3 |
Correct |
0 ms |
2024 KB |
Output is correct |
4 |
Correct |
0 ms |
2024 KB |
Output is correct |
5 |
Correct |
0 ms |
2024 KB |
Output is correct |
6 |
Correct |
0 ms |
2156 KB |
Output is correct |
7 |
Correct |
0 ms |
2024 KB |
Output is correct |
8 |
Correct |
0 ms |
2156 KB |
Output is correct |
9 |
Correct |
0 ms |
2024 KB |
Output is correct |
10 |
Correct |
0 ms |
2156 KB |
Output is correct |
11 |
Correct |
0 ms |
2156 KB |
Output is correct |
12 |
Correct |
0 ms |
2288 KB |
Output is correct |
13 |
Correct |
0 ms |
2024 KB |
Output is correct |
14 |
Correct |
0 ms |
2024 KB |
Output is correct |
15 |
Correct |
0 ms |
2024 KB |
Output is correct |
16 |
Correct |
0 ms |
2024 KB |
Output is correct |
17 |
Correct |
0 ms |
2024 KB |
Output is correct |
18 |
Correct |
0 ms |
2024 KB |
Output is correct |
19 |
Correct |
0 ms |
2024 KB |
Output is correct |
20 |
Correct |
0 ms |
2024 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
6 ms |
2512 KB |
Output is correct |
2 |
Correct |
6 ms |
2512 KB |
Output is correct |
3 |
Correct |
6 ms |
2512 KB |
Output is correct |
4 |
Incorrect |
6 ms |
2512 KB |
3rd lines differ - on the 1st token, expected: '1', found: '0' |
5 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
6 ms |
2372 KB |
3rd lines differ - on the 1st token, expected: '1', found: '0' |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
3 ms |
2512 KB |
3rd lines differ - on the 1st token, expected: '1', found: '0' |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
3 ms |
2304 KB |
3rd lines differ - on the 14th token, expected: '1', found: '0' |
2 |
Halted |
0 ms |
0 KB |
- |