P15729 [JAG 2024 Summer Camp #2] Add Add Add
不难发现,当前答案应该是上一个答案加上 $i+j=k (i,j\le n)$ 的贡献,所以考虑求:
$$
\begin{aligned}
&\sum_{i+j=k(i,j\le n)} (A_i+B_j) \\
=&\sum_{i=\max(k-n,1)}^{min(k-1,n)} (A_i+B_{k-i}) \\
=&\sum_{i=\max(k-n,1)}^{min(k-1,n)} A_i +\sum_{i=\max(k-n,1)}^{min(k-1,n)} B_i
\end{aligned}
$$
前缀和即可。
代码:
C++
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+5;
int n,k,ans;
int a[N],b[N];
signed main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i],a[i]+=a[i-1];
for(int i=1;i<=n;i++) cin>>b[i],b[i]+=b[i-1];
for(int i=2;i<=2*n;i++) cout<<(ans+=a[min(n,i-1)]-a[max(i-n,1ll)-1]+b[min(n,i-1)]-b[max(i-n,1ll)-1])<<"\n";
return 0;
}

Comments NOTHING