您的位置:首页 > 其它

ACM-补提交 (ZCMU-1617)

2016-08-13 20:06 495 查看



Description

 TOM给自己定了一个宏伟的目标:连续100天每天坚持在zcmu上提交一个程序。100天过去了,tom查看自己的提交记录发现有N天因为贪玩忘记提交了。于是TOM要来M张"补提交卡"。每张"补提交卡"都可以补回一天的提交,将原本没有提交程序的一天变成有提交程序的一天。tom想知道通过利用这M张补提交卡,可以使自己的"最长连续提交天数"最多变成多少天。

Input

 第一行是一个整数T(1 <= T <= 10),代表测试数据的组数。

每个测试数据第一行是2个整数N和M(0 <= N, M <= 100)。第二行包含N个整数,表示第a1, a2, ...  aN天TOM没有提交程序。ai<=100

Output

对于每组数据,输出通过使用补提交卡TOM的最长连续提交天数最多变成多少。

Sample Input

3

5 1

34 77 82 83 84

5 2

10 30 55 56 90

5 10

10 30 55 56 90

Sample Output

76

59

100

HINT

Source

#include<stdio.h>
main ()
{
int  a;
scanf("%d",&a);
while (a--)
{
int  j,c,i,n,m,b[105],max,k,temp;
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
scanf("%d",&b[i]);
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
{
if(b[i]>b[j])
{
temp=b[j];
b[j]=b[i];
b[i]=temp;
}
}
max=b[m];//定义当前的最大值为,数据的从左至右使用了补提交卡后的数值(eg:第一组测试数据中   max定义为77)
for(i=0;i<n-m-1;i++)
if((b[i+m+1]-b[i])>max)
{

max=b[i+m+1]-b[i];
}//比较数据中的每两个的差值与当前max的大小(eg:第二组数据中 先比较(56-10)和max--55的大小)
if(m>=n)
printf("100\n");
else
{

if(max>100-b[n-1-m])
printf("%d\n",max-1);//比较当前的max和从右往左使用了补提交卡后距离100的数值(eg:第二组测试数据中  max已经等于59 和(100-55)比较大小
else
{
printf("%d\n",100-b[n-1-m]);
}
}
}
}


在这个题目中,重点就是要考虑到各种可能出现最大值max情况,出现在两端额时候所得值极为最大值,出现在数据中的时候需要多减去一(头和尾都不包含进去)。

弄清楚这些问题之后,这个题也就不难了~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ACM