ACM-补提交 (ZCMU-1617)


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
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;ib[j])
				{
					temp=b[j];
					b[j]=b[i];
					b[i]=temp;
				}
			}
                max=b[m];//定义当前的最大值为,数据的从左至右使用了补提交卡后的数值(eg:第一组测试数据中   max定义为77)
            for(i=0;imax)
                {

                    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-补提交 (ZCMU-1617))