はまやんはまやんはまやん

hamayanhamayan's blog

キャンディー・ボックス3 [yukicoder No.582]

https://yukicoder.me/problems/no/582

解説

https://yukicoder.me/submissions/212274

AもBも1個ずつ削れるのであれば、遇奇によってどちらが勝つかが決まる。
今回はBが1個か2個削れるため、Bが偶奇を支配することができればBが常に勝つことができる。
そのため、Aが勝てる状況のみを考える。

  • 全て1で総和が奇数
  • 2が1つで他が全て1つで奇数個
typedef long long ll;
int N;
//---------------------------------------------------------------------------------------------------
string solve() {
    vector<int> v;
    ll sm = 0;
    rep(i, 0, N) {
        int x; cin >> x;
        if (x) v.push_back(x);
        sm += x;
    }
    sort(v.begin(), v.end());

    if (sm == 0) return "B";
    if (v.back() == 1) {
        if (sm % 2 == 0) return "B";
        else return "A";
    }

    map<int, int> cnt;
    fore(x, v) cnt[x]++;

    if (cnt[2] == 1 and v.size() == (cnt[1] + cnt[2]) and cnt[1] % 2 == 1) return "A";

    return "B";
}
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N;
    cout << solve() << endl;
}