T120624 哪有那么花里胡哨这题就叫徐悦然哈哈哈

这是一道思维题,你用二分去做么?!

题目描述

某年某月某日,徐悦然打开了手机准备看直播,但是他忽然眼前一片白光,再次睁开眼,他来到了一个陌生的世界。
徐悦然十分冷静沉稳,便找人打探消息。
通过多方面的了解,他知道自己来了一个叫做 “徐悦然” 的星球,根据传统习俗,在这个星球上只存在三种名字,分别是:“徐”,“悦”,“然”。
他们组队行事,在3个人组成的队伍中,至少有一个人叫 “徐”、“悦”。
现在他忽然得知,只有当他知道在这个星球上最多能组成多少个队伍,他才可能回到地球继续看直播,所以他开始疯狂地询问。
已知他询问了n次,每次询问都可得知a,b,c的个数,分别代表“徐” “悦” “然”的个数。
现在,机智的你能帮帮他吗?

输入格式

输入一个n,1<=n<1000 输入n组a,b,c,1<=a,b,c<=1000000

输出格式

每组输出一个最多的组数

输入 #1

5
1 1 1
3 6 0
0 0 0
0 1 1
1 10 10

输出 #1

1
3
0
0
1

先看看第一次是怎么想的:
根据木桶原理,至多组队数=a、b中的最小数,
提交,WA 。

我们看这种情形:a=3,b=3,c=0
按照老思路,min(a, b)=3
若a,b两两匹配出3组,则再也找不出第三个队友了!
那答案是0么?
不!a,b在每组中至少各1人,至多呢?
a=2,b=1,c=0,也能成团!
这样一来:至多组队数=sum/3=2

其实,我们只需要拿 min(a, b) 和 sum/3 比较即可。


附:最简代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
using namespace std;

int main()
{
	int n,a,b,c;
    cin>>n;
    while(n--)
    {
        cin>>a>>b>>c;
        cout<<min(min(a,b),(a+b+c)/3)<<endl;
    }
	return 0;
}

竟是如此简洁!我竟如此愚钝!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值