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; } };