ACM-补提交 (ZCMU-1617)

    xiaoxiao2025-01-10  8

    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<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情况,出现在两端额时候所得值极为最大值,出现在数据中的时候需要多减去一(头和尾都不包含进去)。

    弄清楚这些问题之后,这个题也就不难了~

    转载请注明原文地址: https://ju.6miu.com/read-1295354.html
    最新回复(0)