Codeforcesラウンド#603(本部2)A.スウィート問題

タイトル説明

制限時間:1秒、スペースの制約:256メガバイト

赤、緑、青のキャンディー:あなたは、キャンディーの3つの山を持っています:

  • 最初の山は赤のみキャンディーが含まれており、Rキャンディーがそれです、
  • 二山は緑のみキャンディーが含まれており、その中のGキャンディーがあり、
  • 第三パイルのみ青キャンディーが含まれており、その中のBキャンディーがあります。

毎日ターニャは、異なる色のちょうど二つのキャンディーを食べます。彼女は食べキャンディーの色を自由に選択することが:彼女は一日に同じ色の2つのキャンディーを食べることができないことを唯一の制限。

ターニャはキャンディーを食べることができる日数の最大数を探しますか?毎日彼女はちょうど二つのキャンディーを食べる必要があります。

エントリー

入力のテストケースの数 - 最初の行は整数T(1≤t≤1000)を含みます。そして、t検定の例は以下の通り。

各テストケースは、入力の別の行として与えられます。それぞれ、赤、緑、青キャンディーの数 - これは3つの整数は、GおよびBを(1≤r、G、b≤108)[式中、R含ま。

輸出

トンの整数を印刷:i番目印刷整数を入力のi番目のテスト・ケースの答えです。

サンプル

入力

6
1 1 1
1 2 1
4 1
7 4 10
8 1 4
8 2 8

出力

1
2
2
10
5
9

問題の意味の分析

データのq個のセットは、それぞれ所定の3つの正の数、減算から選択された各2つの数字が、ほとんどのいくつかのような3つの第1の出現回数0の後に尋ね

C ++コード

#include <cstdio>
#include <algorithm>

using namespace std;

int main() {
    int q;
    scanf("%d", &q);
    while (q --) {
        int r, g, b;
        scanf("%d%d%d", &r, &g, &b);
        // 最小值,最大值,中间值
        // 思路就是将中间值分配到最小值和最大值上,使得这两个值的大小尽可能接近 
        int mi = min(r, min(g, b)), ma = max(r, max(g, b)), mid = r + g + b - mi - ma;
        if (mi + mid <= ma) mi += mid;
        else {
            int tmp = mi + mid - ma;
            mi += mid;
            mi -= tmp / 2 + tmp % 2;
            ma += tmp / 2;
        }
        printf("%d\n", mi);
    }
    return 0;
}

おすすめ

転載: www.cnblogs.com/xiximo1204/p/11967031.html