预计得分60pts
但是只得了50分,有一个测试点WA了
大佬求调
#include<iostream>
#include<algorithm>
using namespace std;
#define int long long
const int MAXN = 2e6 + 10;
int a[MAXN],sum[MAXN],n,p,d,ans;
signed main(){
ios::sync_with_stdio(false);
cin >> n >> p >> d;
for(int i = 1;i <= n;++i) cin >> a[i],sum[i] = sum[i - 1] + a[i];
int r = 1;
while(r <= n){
int res = sum[r],maxn = 0;
for(int i = 1;i + d - 1 <= r;++i) maxn = max(maxn,sum[i + d - 1] - sum[i - 1]);
if((res - maxn) <= p) break;
++r;
}
while(r <= n){
int res = sum[r],maxn = 0;
for(int i = 1;i + d - 1 <= r;++i) maxn = max(maxn,sum[i + d - 1] - sum[i - 1]);
if(res - maxn > p){
--r;
break;
}
++r;
}
if(r > n) return 0;
ans = r;
for(int l = 2;l <= n;++l){
r = max(r,l);
while(r <= n){
int res = sum[r] - sum[l - 1],maxn = 0;
for(int i = l;i + d - 1 <= r;++i) maxn = max(maxn,sum[i + d - 1] - sum[i - 1]);
if((res - maxn) <= p) break;
++r;
}
while(r <= n){
int res = sum[r] - sum[l - 1],maxn = 0;
for(int i = l;i + d - 1 <= r;++i) maxn = max(maxn,sum[i + d - 1] - sum[i - 1]);
if(res - maxn > p){
--r;
break;
}
++r;
}
if(r > n) break;
ans = max(ans,r - l + 1);
}
cout << ans << endl;
return 0;
}