14 Money Trees

Money Trees

image

用双指针不断的收缩区间即可

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int a[N],b[N];
void solve(){
	int n,k;
	cin>>n>>k;
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=1;i<=n;i++)cin>>b[i];
	int ans=0,sum=0;
	int j=1;
	for(int i=1;i<=n-1;i++){
		sum+=a[i];
		while(sum>k&&j<=i){
			sum-=a[j];
			j++;
		}
		ans=max(ans,i-j+1);
		if(b[i]%b[i+1]!=0){
			sum=0;
			j=i+1;
		}
	}
	sum+=a[n];
	while(sum>k&&j<=n){
			sum-=a[j];
			j++;
		}
	ans=max(ans,n-j+1);
	cout<<ans<<"\n";
}
int main(){
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	int t=1;
	cin>>t;
	for(int i=1;i<=t;i++)solve();
	return 0;
} 
posted @ 2024-01-18 22:20  yufan1102  阅读(3)  评论(0编辑  收藏  举报