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;
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#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
AC × 1
AC × 2
WA × 2
TLE × 45
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


2025-10-13 (Mon)
08:47:28 +09:00