P15729 [JAG 2024 Summer Camp #2] Add Add Add

笔记

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 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; }`

Read more · Journal