1617: 补提交
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 318 Solved: 56
[Submit][Status][Web Board]
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
<span style="background-color: rgb(51, 204, 0);">
<span style="background-color: rgb(51, 255, 51);">自己做题的时候忽略了 对输入的数据进行排. 测试结果题目给的并不全面</span>;</span>
<span style="background-color: rgb(51, 255, 51);">比如测试4 2 1 5 9 14 就出现了报错</span>
#include<stdio.h>
#include<string.h>
int main()
{
int repeat,i,sum,num,size,flag;
int a[105],temp,j;
scanf("%d",&repeat);
while(repeat--)
{
sum=0;
a[0]=0;//自己定义的标为0的为0
scanf("%d%d",&num,&size);
for(i=1;i<=num;i++)
{
scanf("%d",&a[i]);
}
for(i=1;i<num;i++)//对输入的数据进行排序
for(j=i+1;j<=num;j++)
{
if(a[i]>a[j])
{
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
};
if(num<=size)//当补签卡大于等于漏掉的天数时直接输出100天
{
printf("%d\n",100);
}
else//否则开始比较补签卡
{
sum=a[size+1];//注意,此时的a[0]=0从左边数据开始算起,补签卡个数的后面一个减去,当前数据,
//比如补签卡有3个就从第四个数据开始用a[4]-a[0];等于补签的天数。依次扫描
for(i=0;i<(num-size);i++)
{
sum=sum>(a[size+i+1]-a[i])?sum:(a[size+i+1]-a[i]);
}
flag=sum;
sum=sum>(100-a[num-size])?sum:(100-a[num-size]);//因为上面没比较100到补签卡的天数,所以再算一遍;比如补签卡2张就100-a[n-2]
if(sum==100-a[num-size])
printf("%d\n",sum);
else
printf("%d\n",sum-1);
}
}
}
转载请注明原文地址: https://ju.6miu.com/read-1295358.html