# Swust 12th acm 邀请赛# [ A ] A+B problem [题解]

简明题意

A、B数组 A有n个数,B有m个数 m<=n

对A进行 n-m+1次操作

对第i次操作 (1<=i<=n-m+1) Ai=ai+b1,Ai+1=Ai+1+B2...,Ai+m-1=Ai+m-1+Bm

求A数组

Input

T (<=40)多组数据

每组数据三行

第一行 n,m (1<=m<=n<=105)表示A、B元素的个数

第二行 n个 Ai

第三行 m个Bi


Output

操作后的A数组n个整数 空格隔开.

Sample Input

1

4 2

1 1 1 1

1 1

Sample output

2 3 3 2


解题思路:前缀和优化

#include<cstdio>
#define N 100005
#define LL long long
 
LL a[N],b[N];
LL t;
 
int main(){
 
	int T;
	int n,m;
 
	scanf("%d",&T);
	while(T--){
		t=0;
 
		scanf("%d%d",&n,&m);
		for(int i=0;i<n;++i) scanf("%lld",&a[i]);
		for(int i=0;i<m;++i) scanf("%lld",&b[i]);
 
		for(int i=0;i<n;++i){
			if(i<m) t+=b[i];
			if(i>n-m) t-=b[i-n+m-1];
			a[i]+=t;
 
			if(i!=0) printf(" ");
			printf("%lld",a[i]);
		}
		printf("\n");
	}
	return 0;
}


你可能感兴趣的:(# Swust 12th acm 邀请赛# [ A ] A+B problem [题解])