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
35 1
34 77 82 83 84
5 2
10 30 55 56 90
5 10
10 30 55 56 90
Sample Output
7659
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情况,出现在两端额时候所得值极为最大值,出现在数据中的时候需要多减去一(头和尾都不包含进去)。
弄清楚这些问题之后,这个题也就不难了~
相关文章推荐
- zcmu 1617: 补提交
- ACM基础——OJ上的Java代码提交规范
- 杭电ACM(1002) -- A + B Problem II 大数相加 -提交通过
- 杭电ACM大数JAVA提交实例
- ACM 1000题 A + B Problem(为什么你本地测试正确,提交代码却错误)
- 关于用Java做ACM的题目提交时的问题
- 杭电ACM大数JAVA提交实例
- acm中c++与g++ 有什么区别?提交时,要注意什么?(详细一点...)
- ACM 提交结果
- zcmu 1617补提交
- ACM提交可能情况
- ACM过程中的提交结果(新手必看!)
- 素数C语言代码。ACM平台上总有些题目不是提交输出超限就是答案错误,,,,,,,,不懂,
- 杭电ACM大数JAVA提交实例
- zcmu1617
- 我提交的ACM题库的答案
- 一个ACM在线提交系统,支持c#提交
- 解决window.showModalDialog提交表单在新窗口中打开的问题
- ACM题目小经验
- 将数据库常用的操作(连接数据库,获得所有数据,获得一条记录,获得一列记录,获得一条索引数组,获得一条关联数组)都给封装到db.class.php里面,谁需要谁继承这个类 注意:提交封装的类文件