前缀和预处理

    地址:http://acm.csust.edu.cn/contest/78/problem/A

 

 

 

Input

 

第一行包含一个正整数n(1\leq n\leq 10^5)n(1n105)。

第二行包含nn个整数a_i(1\leq a_i\leq 100)ai(1ai100)。

第三行包含nn个整数b_i(1\leq b_i\leq 100)bi(1bi100)。

 

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

 

posted @ 2020-03-16 23:23  liyexin  阅读(284)  评论(0编辑  收藏  举报