HihoCoder#1051:补提交卡

1051 : 补提交卡

时间限制:2000ms
单点时限:1000ms
内存限制:256MB
描述
小Ho给自己定了一个宏伟的目标:连续100天每天坚持在hihoCoder上提交一个程序。100天过去了,小Ho查看自己的提交记录发现有N天因为贪玩忘记提交了。于是小Ho软磨硬泡、强忍着小Hi鄙视的眼神从小Hi那里要来M张”补提交卡”。每张”补提交卡”都可以补回一天的提交,将原本没有提交程序的一天变成有提交程序的一天。小Ho想知道通过利用这M张补提交卡,可以使自己的”最长连续提交天数”最多变成多少天。

输入
第一行是一个整数T(1 <= T <= 10),代表测试数据的组数。

每个测试数据第一行是2个整数N和M(0 <= N, M <= 100)。第二行包含N个整数a1, a2, … aN(1 <= a1 < a2 < … < aN <= 100),表示第a1, a2, … aN天小Ho没有提交程序。

输出
对于每组数据,输出通过使用补提交卡小Ho的最长连续提交天数最多变成多少。

样例输入
3
5 1
34 77 82 83 84
5 2
10 30 55 56 90
5 10
10 30 55 56 90
样例输出
76
59
100
这道题唯一一个值得写的地方就是程序从头至尾都是自己一个一个码出来的,没有查阅任何资料,当然我现在也就能刷刷这种题找找自信了。。。。。另外一点就是自己居然用了vector,真是可喜可贺(……)

我都不知道这道题跟贪心有什么关系。总而言之,思路就是起点是第0天,把第0天加入,之后有越多的补交卡,计算的距离就会越来越远,因为消除了。取遍历的最大值即可。如果补交卡的数量都大于等于没去的天数了,直接输出100。
上代码:

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    int count;
    cin>>count;

    while(count--)
    {
        int N,M,temp;

        cin>>N>>M;

        temp = N;

        vector<int> a;
        a.push_back(0);

        while(temp--)
        {
            int day;

            cin>>day;

            a.push_back(day);
        }
        if(M>=N)
        {
            cout<<"100"<<endl;
        }
        else
        {
            int count=0,result=0;
            while(count+M+1<a.size())
            {
                if(a[count+M+1]-a[count]>=result)
                {
                    result=a[count+M+1]-a[count];
                }
                count++;
            }
            cout<<result-1<<endl;
        }

    }


    return 0;

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

原文地址:https://www.cnblogs.com/lightspeedsmallson/p/4785904.html