本文主要是介绍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
5 1
34 77 82 83 84
5 2
10 30 55 56 90
5 10
10 30 55 56 90
Sample Output
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-补提交 (ZCMU-1617)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!