这道题可以计算出没有做的日子之间的间隔,然后通过枚举,结合卡片数看哪几个间隔比较大,然后就补上,对应最长的连续天数就是间隔之和。
#include <iostream>
using namespace std;
#include <vector>
int main(){
int t,n,m,i;
cin>>t;
while(t--){
vector<int> v;//存放已经写过的日子
cin>>n>>m;
int left=0;
for(i=0;i<n;i++){
int x;
cin>>x;
v.push_back(x-left-1);
left=x;
}
v.push_back(100-left);
/*
33 left=34
42 77
4 82
0 83
0 84
16
9 10
19 30
24 55
0 56
33 90
10
*/
if(m>=n){//卡片大于n直接输出100
cout<<100<<endl;
continue;
}
int d=m;
int max=0;
for(i=0;i<v.size();i++){
int j=i+d;
int sum=0;
if(j<v.size()){
for(int k=i;k<=j;k++){
sum+=v[k];
}
sum+=m;
if(sum>max)
max=sum;
}
}
cout<<max<<endl;
}
return 0;
}