Sweet Problem

Sweet Problem ⁡ \operatorname{Sweet\ Problem} Sweet Problem

题目链接: luogu CF1263A ⁡ \operatorname{luogu\ CF1263A} luogu CF1263A

题目

有三堆糖果,在同一堆中的糖果颜色相同,但没有两堆糖果的颜色是一样的。

你每天要吃掉两个糖果,但不能吃掉两个颜色相同的糖果。你最多可以吃多少天?

输入

第一行一个正整数 t ( 1 ≤ t ≤ 1000 ) t(1\leq t \leq 1000) t(1t1000) 测试数据的数量。

对于每组测试数据,在一行有三个正整数 r , g , b ( 1 ≤ r , g , b ≤ 1 0 8 ) r,g,b(1\leq r,g,b \leq 10^8) r,g,b(1r,g,b108) ,表示每堆糖果的数量。

输出

对于每组测试数据,输出一个整数,表示最多可以吃的天数。

翻译贡献者 U108949

样例输入

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

样例输出

1
2
2
10
5
9

思路

这道题是一道规律题。

我们可以把每堆糖果的数量从小到大排序,然后分类讨论。
如果最大的那一堆比剩下两堆加起来还要大,那就只能用那两堆和最多的那一堆组合,就是最小两个的糖果数量。
那如果不是,我们就可以发现必定有一种方法可以把它们平均分配到没有或者只剩一个。那答案就是所有糖果的数量的 / 2 /2 /2 。(这里的 / / / 是整除)

那就可以了。

代码

#include<cstdio>
#include<algorithm>

using namespace std;

int n, a[4];

int main() {
    
    
	scanf("%d", &n);//读入
	for (int i = 1; i <= n; i++) {
    
    
		scanf("%d %d %d", &a[1], &a[2], &a[3]);//读入
		
		sort(a + 1, a + 3 + 1);//排序
		if (a[3] > a[1] + a[2]) printf("%d\n", a[1] + a[2]);//少的那两堆糖果全部和剩下那一堆组合都组不玩
			else printf("%d\n", (a[1] + a[2] + a[3]) / 2);//可以平均分配
	}
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43346722/article/details/108350451