前缀和预处理
地址:http://acm.csust.edu.cn/contest/78/problem/A
Input
第一行包含一个正整数n(1\leq n\leq 10^5)n(1≤n≤105)。
第二行包含nn个整数a_i(1\leq a_i\leq 100)ai(1≤ai≤100)。
第三行包含nn个整数b_i(1\leq b_i\leq 100)bi(1≤bi≤100)。
Output
输出DescriptionDescription
3 1 2 3 1 2 3
25
题意:根据所给代码。比如 1 2 3
4 5 6
就是1*4+1*5+1*6+2*5+2*6+3*6
解析:上面这个就是1*(4+5+6)+2*(5+6)+3*6,括号里就可以使用前缀和来预处理一下,记得倒着处理。
#include<iostream> #include<vector> #include<set> #include<cmath> using namespace std; typedef long long ll; const int maxn=1e5+10; int a[maxn]; int b[maxn],c[maxn]; int main() { int n; cin>>n; for(int i=0;i<n;i++) cin>>a[i]; for(int i=0;i<n;i++) cin>>b[i]; for(int i=n;i>=0;i--) b[i]=b[i+1]+b[i]; ll sum=0; for(int i=0;i<n;i++) sum+=a[i]*b[i]; cout<<sum<<endl; }