小明的花坛
#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;
}