双指针求助
查看原帖
双指针求助
934977
lichengxi1楼主2024/10/2 22:56

预计得分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;
}
2024/10/2 22:56
加载中...