Submission #70104136
Source Code Expand
Copy
#include <bits/stdc++.h>using namespace std;#include <atcoder/all>using namespace atcoder;using ll = long long;using ld = long double;using P = pair<int, int>;using Graph = vector<vector<ll>>;using vi = vector<int>;using vl = vector<long>;using vll = vector<long long>;using vvi = vector<vi>;using vvl = vector<vl>;using vvll = vector<vll>;using vs = vector<string>;using vc = vector<char>;using vvc = vector<vc>;using pll = pair<long long, long long>;using vpll = vector<pll>;using mint = modint1000000007;const long double EPS = 1e-18;
#include <bits/stdc++.h>
using namespace std;
#include <atcoder/all>
using namespace atcoder;
using ll = long long;
using ld = long double;
using P = pair<int, int>;
using Graph = vector<vector<ll>>;
using vi = vector<int>;
using vl = vector<long>;
using vll = vector<long long>;
using vvi = vector<vi>;
using vvl = vector<vl>;
using vvll = vector<vll>;
using vs = vector<string>;
using vc = vector<char>;
using vvc = vector<vc>;
using pll = pair<long long, long long>;
using vpll = vector<pll>;
using mint = modint1000000007;
const long double EPS = 1e-18;
const long long INF = 1e18;
const long double PI = acos(-1.0L);
#define reps(i, a, n) for (ll i = (a); i < (ll)(n); i++)
#define rep(i, n) for (ll i = (0); i < (ll)(n); i++)
#define rrep(i, n) for (ll i = (1); i < (ll)(n + 1); i++)
#define repd(i, n) for (ll i = n - 1; i >= 0; i--)
#define rrepd(i, n) for (ll i = n; i >= 1; i--)
#define ALL(n) begin(n), end(n)
#define IN(a, x, b) (a <= x && x < b)
#define INIT \
std::ios::sync_with_stdio(false); \
std::cin.tie(0);
template <class T>
inline T CHMAX(T& a, const T b) {
return a = (a < b) ? b : a;
}
template <class T>
inline T CHMIN(T& a, const T b) {
return a = (a > b) ? b : a;
}
unordered_map<ll, int> memo;
ll Xg, Yg;
inline bool is_forbidden(ll v) {
return (v > 0) && ((v % Xg == 0) || (v % Yg == 0));
}
int compute_grundy(ll k) {
if (k == 0) return 0;
if (memo.count(k)) return memo[k];
vector<ll> stk;
stk.push_back(k);
while (!stk.empty()) {
ll v = stk.back();
if (memo.count(v)) {
stk.pop_back();
continue;
}
bool can1 = (v >= 1) && !is_forbidden(v - 1);
bool can2 = (v >= 2) && !is_forbidden(v - 2);
vector<ll> deps;
auto add_deps = [&](ll t) {
if (t == 0) return;
ll f = max((t / Xg) * Xg, (t / Yg) * Yg);
if (t >= f + 3) {
if (!memo.count(f + 1)) deps.push_back(f + 1);
if (!memo.count(f + 2)) deps.push_back(f + 2);
} else {
if (!memo.count(t)) deps.push_back(t);
}
};
if (can1) add_deps(v - 1);
if (can2) add_deps(v - 2);
bool pushed = false;
for (ll d : deps) {
if (!memo.count(d)) {
stk.push_back(d);
pushed = true;
}
}
if (pushed) continue;
auto resolve = [&](ll t) -> int {
if (t == 0) return 0;
ll f = max((t / Xg) * Xg, (t / Yg) * Yg);
if (t >= f + 3) {
int g1 = memo.at(f + 1);
int g2 = memo.at(f + 2);
set<int> s = {g1, g2};
int g3 = 0;
while (s.count(g3)) g3++;
ll dist = t - (f + 1);
if (dist % 3 == 0) return g1;
if (dist % 3 == 1) return g2;
return g3;
}
return memo.at(t);
};
set<int> seen;
if (can1) seen.insert(resolve(v - 1));
if (can2) seen.insert(resolve(v - 2));
int g = 0;
while (seen.count(g)) g++;
memo[v] = g;
stk.pop_back();
}
return memo[k];
}
void solve() {
ll n, X, Y;
cin >> n >> X >> Y;
Xg = X; Yg = Y;
memo.clear();
map<ll, int> counts;
rep(i, n) {
ll val;
cin >> val;
counts[val]++;
}
int nim_sum = 0;
for(auto const& [val, count] : counts) {
if (count % 2 == 1) {
nim_sum ^= compute_grundy(val);
}
}
if (nim_sum != 0) cout << "Alice" << endl;
else cout << "Bob" << endl;
}
int main() {
INIT;
ll T;
cin >> T;
while (T--) solve();
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | E - XY Game |
| User | hikikomori |
| Language | C++ 23 (gcc 12.2) |
| Score | 0 |
| Code Size | 3960 Byte |
| Status | WA |
| Exec Time | 3358 ms |
| Memory | 1051852 KiB |
Judge Result
| Set Name | Sample | All | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 0 / 1100 | ||||||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | 00_sample_00.txt |
| All | 00_sample_00.txt, 01_small_00.txt, 01_small_01.txt, 02_handmade_00.txt, 02_handmade_01.txt, 03_random_00.txt, 03_random_01.txt, 03_random_02.txt, 03_random_03.txt, 03_random_04.txt, 03_random_05.txt, 03_random_06.txt, 03_random_07.txt, 03_random_08.txt, 03_random_09.txt, 03_random_10.txt, 03_random_11.txt, 03_random_12.txt, 03_random_13.txt, 03_random_14.txt, 03_random_15.txt, 03_random_16.txt, 03_random_17.txt, 03_random_18.txt, 03_random_19.txt, 03_random_20.txt, 03_random_21.txt, 03_random_22.txt, 03_random_23.txt, 03_random_24.txt, 03_random_25.txt, 03_random_26.txt, 03_random_27.txt, 03_random_28.txt, 03_random_29.txt, 03_random_30.txt, 03_random_31.txt, 03_random_32.txt, 03_random_33.txt, 03_random_34.txt, 03_random_35.txt, 03_random_36.txt, 03_random_37.txt, 03_random_38.txt, 03_random_39.txt, 03_random_40.txt, 03_random_41.txt, 03_random_42.txt, 03_random_43.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 00_sample_00.txt | AC | 1 ms | 3592 KiB |
| 01_small_00.txt | WA | 1558 ms | 3520 KiB |
| 01_small_01.txt | WA | 1552 ms | 3520 KiB |
| 02_handmade_00.txt | AC | 17 ms | 3492 KiB |
| 02_handmade_01.txt | TLE | 3348 ms | 1051800 KiB |
| 03_random_00.txt | TLE | 3357 ms | 1051792 KiB |
| 03_random_01.txt | TLE | 3357 ms | 1051680 KiB |
| 03_random_02.txt | TLE | 3357 ms | 1051832 KiB |
| 03_random_03.txt | TLE | 3355 ms | 1051776 KiB |
| 03_random_04.txt | TLE | 3356 ms | 1051684 KiB |
| 03_random_05.txt | TLE | 3355 ms | 1051652 KiB |
| 03_random_06.txt | TLE | 3358 ms | 1051852 KiB |
| 03_random_07.txt | TLE | 3358 ms | 1051744 KiB |
| 03_random_08.txt | TLE | 3358 ms | 1051756 KiB |
| 03_random_09.txt | TLE | 3357 ms | 1051656 KiB |
| 03_random_10.txt | TLE | 3311 ms | 15064 KiB |
| 03_random_11.txt | TLE | 3312 ms | 125344 KiB |
| 03_random_12.txt | TLE | 3311 ms | 15112 KiB |
| 03_random_13.txt | TLE | 3313 ms | 53588 KiB |
| 03_random_14.txt | TLE | 3312 ms | 20788 KiB |
| 03_random_15.txt | TLE | 3312 ms | 27084 KiB |
| 03_random_16.txt | TLE | 3312 ms | 28240 KiB |
| 03_random_17.txt | TLE | 3313 ms | 56640 KiB |
| 03_random_18.txt | TLE | 3311 ms | 8888 KiB |
| 03_random_19.txt | TLE | 3354 ms | 1051708 KiB |
| 03_random_20.txt | TLE | 3356 ms | 1051644 KiB |
| 03_random_21.txt | TLE | 3342 ms | 530972 KiB |
| 03_random_22.txt | TLE | 3356 ms | 1051640 KiB |
| 03_random_23.txt | TLE | 3354 ms | 1051652 KiB |
| 03_random_24.txt | TLE | 3357 ms | 1051668 KiB |
| 03_random_25.txt | TLE | 3352 ms | 1051704 KiB |
| 03_random_26.txt | TLE | 3355 ms | 1051704 KiB |
| 03_random_27.txt | TLE | 3356 ms | 1051636 KiB |
| 03_random_28.txt | TLE | 3356 ms | 1051680 KiB |
| 03_random_29.txt | TLE | 3357 ms | 1051752 KiB |
| 03_random_30.txt | TLE | 3358 ms | 1051708 KiB |
| 03_random_31.txt | TLE | 3357 ms | 1051744 KiB |
| 03_random_32.txt | TLE | 3354 ms | 1051740 KiB |
| 03_random_33.txt | TLE | 3358 ms | 1051640 KiB |
| 03_random_34.txt | TLE | 3356 ms | 1051672 KiB |
| 03_random_35.txt | TLE | 3356 ms | 1051704 KiB |
| 03_random_36.txt | TLE | 3345 ms | 599344 KiB |
| 03_random_37.txt | TLE | 3347 ms | 641360 KiB |
| 03_random_38.txt | TLE | 3356 ms | 1051848 KiB |
| 03_random_39.txt | TLE | 3355 ms | 1051704 KiB |
| 03_random_40.txt | TLE | 3354 ms | 1051676 KiB |
| 03_random_41.txt | TLE | 3358 ms | 1051624 KiB |
| 03_random_42.txt | TLE | 3356 ms | 1051636 KiB |
| 03_random_43.txt | TLE | 3354 ms | 1051632 KiB |