SPOJ 28270 BIPCSMR16

来源:互联网 发布:淘宝店推广软文范文 编辑:程序博客网 时间:2024/06/10 17:17

Description
一年级X人,二年级Y人,三年级Z人,一个队伍要三个人,但这三个人不能全部是同一年级,问这些人最多可以组成几个队
Input
第一行一整数T表示用例组数,每组用例输入三个整数X,Y,Z
(1<=T<=1e4,1<=X,Y,Z<=2e9)
Output
对于每组用例,输出最多可以组的队伍数
Sample Input
2
1 2 3
1 12 3
Sample Output
2
4
Solution
先给三个数排个序,不妨令X<=Y<=Z,如果Z>=(X+Y)*2,那么最多可以组X+Y个队(每个队伍两个Z加个X或Y),否则不会有某个年级的人多出来,可以组(X+Y+Z)/3个队
Code

#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#include<queue>#include<map>#include<set>#include<ctime>using namespace std;typedef long long ll;#define INF 0x3f3f3f3f#define maxn 1111int main(){    int T;    ll a[3];    scanf("%d",&T);    while(T--)    {        for(int i=0;i<3;i++)scanf("%lld",&a[i]);        sort(a,a+3);        if(a[2]>=2ll*(a[0]+a[1]))printf("%lld\n",a[0]+a[1]);        else printf("%lld\n",(a[0]+a[1]+a[2])/3);    }    return 0;}
原创粉丝点击