Problem 2139 久违的月赛之二
Accept: 40 Submit: 98
Time Limit: 1000 mSec Memory Limit : 32768 KB
Problem Description
好久没举办月赛了,这次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
29276 72 72 53 928170 81 45 63 64
Sample Output
6458
这个题目个人觉得实在不算是简单,反正我没做出来,但是仔细想想又不算难的,只是
做题太少所以没啥子感觉罢了,这个题还是贪心题,与前面的题目相比较,这次我们
还是想要做两个题目的人最多为最优策略,实在不行的话再多一些3,4的所以我们要先
求出金牌的,金牌不够补银牌,银牌不够,补铜牌,就这样了!!!
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int i,j,k,n,t;
int num[5];
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=0;i<5;i++)
scanf("%d",&num[i]);
sort(num,num+5);
int sum=0;
int s=0,h=0;
for(i=0;i<5;i++)
s=s+num[i];
h=s-n*2;
if(h<=0)
{
printf("0\n");
continue;
}
if(num[0]*3>=h)
{
if(h%3==0)
sum=h/3;
else
sum=h/3+1;
printf("%d\n",sum);
}
else
{
h=h-num[0]*3;
num[1]=num[1]-num[0];
num[2]=num[2]-num[0];
if(num[1]*2>=h)
{
if(h%2!=0)
sum=h/2+num[0]+1;
else
sum=h/2+num[0];
printf("%d\n",sum);
}
else
{
sum=sum+num[1];
h=h-num[1]*2;
sum=sum+h+num[0];
printf("%d\n",sum);
}
}
}
return 0;
}