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);
}
}
}