P15729 [JAG 2024 Summer Camp #2] Add Add Add
P15729 [JAG 2024 Summer Camp #2] Add Add Add
不难发现,当前答案应该是上一个答案加上 的贡献,所以考虑求:
\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
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>a[i],a[i]+=a[i-1];
for(int i=1;i>b[i],b[i]+=b[i-1];
for(int i=2;i
`#include
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;in;i++) cin>>a[i],a[i]+=a[i-1];
for(int i=1;in;i++) cin>>b[i],b[i]+=b[i-1];
for(int i=2;i2*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;
}`