小明的花坛

#include<cstring>
#include<algorithm>
using namespace std;
int main(void)
{
	int t;
	scanf("%d",&t);
	for(int i=0;i<t;i++)
	{
		int n,k,sn=0;
		scanf("%d%d",&n,&k);
		k-=1;//但是实际运用覆盖范围的时候要-1
		long long int a[n+5],S[n+5],S2[n+5];
		int b[n+5];//a也long方便加的数据类型统一
		memset(S,0,sizeof(S));
		memset(S2,0,sizeof(S2));
		for(int i=1;i<=n;i++)
		{
			scanf("%lld",&a[i]);
			S[i]=S[i-1]+a[i];
			//美丽值总的前缀和方便等会用
		}
		for(int i=1;i<=n;i++)
		{
			scanf("%d",&b[i]);
			if(b[i]==1)
			{
				sn+=a[i];
				S2[i]=S2[i-1]+a[i];
			}
			else
				S2[i]=S2[i-1];//没浇就直接继承
			//已浇的前缀和,顺便提前加入浇过的
		}
		long long int sn2=sn,MAX=0;//遍历浇花for里面需要每次都有一个sn
		for(int i=1;i<=n-k;i++)
		{//要到i+k所以i<=n-k别越界了
			sn2=sn;
			sn2+=S[i+k]-S[i-1];//要浇的地方加上
			sn2-=S2[i+k]-S2[i-1];//减掉这里面重复的
			MAX=max(MAX,sn2);
		}
		printf("%lld\n",MAX);
	}
	return 0;
	
}