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

hamayanhamayan's blog

Tapu & Tapi [九州大学プログラミングコンテスト2018 B]

https://beta.atcoder.jp/contests/qupc2018/tasks/qupc2018_b

解説

https://beta.atcoder.jp/contests/qupc2018/submissions/3436323

まず総額が奇数ならば、同数に分割はできない。
片方が総数/2を実現できるかを判定する。
ピッタリに払う最適戦略として、高い値段の硬貨を貪欲に使うという方法がある。
総数/2を払うために高い値段の硬貨から貪欲に使っていって、残りが0になれば、片方が総数/2を払えたことになる。
このときYes、そうでないならNo

int Q;
//---------------------------------------------------------------------------------------------------
#define yes "Yes"
#define no "No"
string solve(ll A, ll B, ll C) {
    ll sm = A * 100 + B * 10 + C;
 
    if (sm % 2 == 1) return no;
 
    ll half = sm / 2;
    
    ll p100 = min(half / 100, A);
    half -= p100 * 100;
 
    ll p10 = min(half / 10, B);
    half -= p10 * 10;
 
    ll p1 = min(half, C);
    half -= p1;
 
    if (half == 0) return yes;
    return no;
}
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> Q;
    rep(q, 0, Q) {
        int A, B, C; cin >> A >> B >> C;
        cout << solve(A, B, C) << endl;
    }
}