本题可以转换一下思维,因为他让你求的是通过补卡,从而求最长连续多少天,我们可以将其转化为,先将每段提交的时间记录下来,然后枚举m+1个子段来取最大连续天数即可
#include<iostream>
#include<vector>
using namespace std;
int main(){
int T;
cin >> T;
while(T--){
vector<int> v;//存放已经写的日子数量
int n,m;
cin >> n>> m;
int left=0;
for(int i=0;i<n;i++){
int x;
cin >> x;
v.push_back(x-left-1);
left=x;
}
v.push_back(100-left);
//特殊情况,卡片大于n
if(m>=n){
cout<<100<<endl;
continue;
}
int d=m;
int Max=0;
for(int 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;
}