WARush

SRMの結果とか、解けた問題のコードを書いていきます

SRM609 Div2 Medium "PackingBallsDiv2"

問題

TopCoder Statistics - Problem Statement

赤・緑・青のボールがそれぞれR, G, B個ある。これらのボールをできる限り少ない袋の数で、分別したい。ひとつの袋には1~3個まで入れられる。加えて全ての同じ色のノーマルセットか、全て違う色のバラエティセットにしなければならない。できる限り少ない袋で分別したときの、その袋の数を返せ。

制約

1 <= R, G, B <= 100


考えたこと

とりあえず3色のバラエティセットを作れるだけ作る

3個のノーマルセットを作れるだけ作る

場合わけ
・残り0個 res
・残り1個 res += 1
・残り2個 res += 1
・残り3個 res += 2
・残り4個 res += 2
・残り5個 res += 2


何か似たような問題をCodeForcesでやったなー(そしてそれも撃墜したなー)


ソースコード

class PackingBallsDiv2 {

    public:

    int minPacks(int R, int G, int B) {

        int res = 0;

        int t = min(R, min(G, B));
        R -= t; G -= t; B -= t;
        res += t;

        res += R / 3;
        res += G / 3;
        res += B / 3;
        R %= 3; G %= 3; B %= 3;

        t = R + G + B;
        if (1 <= t && t <= 2) {
            res += 1;
        } else if (3 <= t) {
            res += 2;
        }
        
        return res;
    }
};