acdream 1029

题意 :只要多看几遍公式就可以理解题目的意思。

思路就是预处理前k个a的和与前k个b的和。

代码:

#include
#include
#include
#include
#include
#include
using namespace std;
#define ull unsigned long long
#define eps 1000000007
ull a[100001];
ull b[100001];
ull dpa[100001];
ull dpb[100001];
int main() {
    int n;
    while(~scanf("%d",&n)) {
        for(int i=1; i<=n; i++) {
            scanf("%llu",&a[i]);
        }
        dpa[0]=0;
        for(int i=1; i<=n; i++) {
            dpa[i]=dpa[i-1]+a[i];
        }
        for(int i=1; i<=n; i++) {
            scanf("%llu",&b[i]);
        }
        dpb[0]=0;
        for(int i=1; i<=n; i++) {
            dpb[i]=dpb[i-1]+b[i];
        }
        for(int i=1; i             ull ans=(((dpa[i-1]%eps)*(b[i]%eps))+((dpb[i-1]%eps)*(a[i]%eps))+(a[i]%eps)*(b[i]%eps))%eps;
            printf("%llu ",ans);
        }
        ull ans=(((dpa[n-1]%eps)*(b[n]%eps))+((dpb[n-1]%eps)*(a[n]%eps))+(a[n]%eps)*(b[n]%eps))%eps;
        printf("%llu\n",ans);
    }
    return 0;
}





你可能感兴趣的:(暴力+预处理,动态规划DP)