
Accept: 42 Submit: 106
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
2
92
76 72 72 53 92
81
70 81 45 63 64
Sample Output
64
58
关于1的在 http://www.cnblogs.com/tom987690183/p/3418944.html
1. “每题的通过人数一定大于等于最低获奖人数”,正式基于这个条件,
所以我们的可以把它的和加起来,平均分配各学生。
假如遇到这个例子(2,1,0,0,0),那至少有一个人能获得么?不可以。
2. 这就是2的问题需要考虑的,同理我只要考虑让1个人做错3道题,那么他就不能拿奖了呀。
数据范围比较小,所以可以贪心一下,每次人数+1,前三个大的错误数-1。(⊙o⊙)…,借别人的说.
请参考 http://hi.baidu.com/ydlqw/item/120cd21a5afd5becddeeca41?qq-pf-to=pcqq.c2c
#include<iostream>
#include<stdio.h>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std; int a[];
bool cmp(int n1,int n2)
{
return n1>n2;
}
int main()
{
int T,n;
int i,cur;
while(scanf("%d",&T)>)
{
while(T--)
{
scanf("%d",&n);
for(i=;i<=;i++)
{
scanf("%d",&a[i]);
a[i]=n-a[i];
}
sort(a+,a++,cmp);
cur=;
while(a[]!=)
{
cur=cur+;
if(cur==n)break;//这个你是要考虑的哦 测试数据 5 0 0 0 0 0
a[]=a[]-;
a[]=a[]-;
a[]=a[]-;
sort(a+,a++,cmp);
}
printf("%d\n",n-cur);
}
}
return ;
}