简明题意
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; }