Codeforces #190 Div2 B "Ciel and Flowers"
問題
http://codeforces.com/contest/322/problem/B
訳
キツネのシエルはr本の赤い花、g本の緑の花、b本の青い花を持っていた。彼女はこれらの花を使って花束をいくつか作る。花束は下記のような4種類ある。
・"赤い花束"... 3つの赤い花が必要 ・"緑の花束"... 3つの緑の花が必要 ・"青い花束"... 3つの青い花が必要 ・"ミックス花束"... それぞれの花が1つずつ必要
作れる最大の花束の個数を出力せよ。
制約
0 <= r, g, b <= 10^9
考えた事
それぞれの花束の数を3で割って、とりあえずその数の合計の花束は作れる。あとは3で割った余りの形によって以下のようにする。
余った数の合計が6 ... 花束+2 余った数の合計が5 ... 花束+1 余った数の合計が4で0本のものが無かった ... 花束+1 余った数の合計が3で0本のものが無かった ... 花束+1
事後
ミックス花束を0個、1個、2個使った時で最大値をとればいいらしい
考えられなかった
ソースコード
int main() { int r, g, b; cin >> r >> g >> b; bool findZero = false; findZero |= r == 0; findZero |= g == 0; findZero |= b == 0; int ans = 0; ans += r / 3; r %= 3; ans += g / 3; g %= 3; ans += b / 3; b %= 3; int s = r + g + b; if( s == 6 ){ ans += 2; }else if( s == 5 ){ ans += 1; } else if( s == 4 && !findZero ){ ans += 1; } else if( r == 1 && g == 1 && b == 1 ){ ans += 1; } cout << ans << endl; }