好久没举办月赛了,这次lqw又给大家出了5道题,因为hsy学长宣传的很到位,吸引了n个DDMM们来做,另一位kk学长说,全做对的要给金奖,做对4题要给银奖,做对3题要给铜奖。统计数据的时候,发现每题分别在n个人中有n1、n2、n3、n4、n5个人通过,lqw问kk:“这次难度稍微提高了些,你再猜下,至少会有多少个人获奖?”
Input
第一行一个数字t,表示有多少组数据,每组数据如下所示(100< t < 300, 10<=n<=100, n1,...,n5<=n):
n
n1 n2 n3 n4 n5
Output
针对每组数据,输出一个数,表示最低获奖人数。
Sample Input
2
92
76 72 72 53 92
81
70 81 45 63 64
Sample Output
64
58
//解题报告:在所有人做2个题目的条件下,能够获得金牌的尽量获得金牌,
不能获得金牌,但能获得银牌的就尽量获得银牌,不能获得银牌但能获得
铜牌的就尽量获得铜牌。
//标程:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
int main()
{
// freopen("a.txt","r",stdin);
int i, n, t, x[5];
cin >> t;
while(t--)
{
cin >> n;
int sum=0, s=0;
for(i=0;i<5;i++)
{
cin >> x[i];
s += x[i];
}
sort(x, x+5);
s = s - n*2;
if(s<=0)
{
cout << "0" << endl;
continue;
}
if(x[0]*3>=s) // 获得金牌的情况;
{
sum = s / 3;
if(s % 3 != 0) sum ++;
cout << sum << endl;
}
else
{
s= s- x[0]*3;
x[1] = x[1]- x[0];
if(x[1]*2 >= s) // 获得银牌的情况;
{
sum = s/2 + x[0];
if(s % 2 != 0) sum ++;
cout << sum << endl;
}
else // 获得铜牌的情况;
{
sum = sum+ x[1] + x[0];
s = s- x[1]*2;
sum = sum + s;
cout << sum << endl;
}
}
}
return 0;
}