タイトル説明
制限時間: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;
}