WARush

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

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