Toy と帽子と ADP BE

主にプログラミングに関わる話をゆるくエモくやっていきます

A. Collecting Coins (Codeforces Round #615 Div. 3)

問題

https://codeforces.com/contest/1294/problem/A

問題概要

Aさん、Bさん、Cさん、Pさんは、それぞれa枚、b枚、c枚、n枚のコインを持っています。

Pさんの持っているn枚のコインすべてをAさん、Bさん、Cさんに分け与える時、三人の所有するコインを均等にできるなら"YES"、できないなら"NO"と答えなさい。

考察

まず、a + b + c + nが3で割り切れない場合、均等に三等分できないので"NO"です。

以下、三等分ができる場合で、Aさんがもっとも多くのコインを持っている場合で考えます。(BさんCさんがもっとも多くのコインを持っている場合も、名前を入れ替えるだけで成立するので分けて考える必要はありません。)

(a - b) + (a - c) > nの場合、BさんCさんにn個のコインのうちからどれだけ渡しても、二人共がAさんのコインの数に届くことがないので、この場合も"NO"です。

そうでない場合、BさんCさんのコインの数をAさんに届かせることができるので、均等にすることが可能であり、"YES"です。

コード

#include <bits/stdc++.h>
using namespace std;
 
int main() {
    int t;
    cin >> t;
    while (t--) {
        int a, b, c, n;
        cin >> a >> b >> c >> n;
        if ((a + b + c + n) % 3 != 0) {
            cout << "NO" << endl;
        } else {
            if (a < b) swap(a, b);
            if (b < c) swap(b, c);
            if (a < b) swap(a, b);
            if ((a - b) + (a - c) > n) {
                cout << "NO" << endl;
            } else {
                cout << "YES" << endl;
            }
        }
    }
}

自分用おぼえがき

本番ではおもむろに(a + b + c + n) % 3 != 0だけの条件で投げてWA、次になんかよくわかりませんけど(おい)a > b + c + n || b > a + c + n || c > a + b + nの条件を追加して(三辺による三角形の成立条件的なことを考えていたらしい)またWAを出してしまいました。

本当にこどふぉのA問題に変な癖がついちゃってます。とりあえず落ち着こう。