ACdream 1029 前缀和

Multiplication

Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others)

Submit Statistic Next Problem

Problem Description

If C=A?B, then

C[k]=∑max(i,j)=kA[i]⋅B[j]mod(109+7)

.

Work out sequence C=A?Bfor given sequence A and B.

Input

The first line contains a integer n, which denotes the length of sequence A,B.

The second line contains nn integers a1,a2,…,ana1,a2,…,an , which denote sequence A.

The thrid line contains nn integers b1,b2,…,bnb1,b2,…,bn , which denote sequenceB.

(1≤n≤105,0≤ai,bi≤109)

Output

nn integers, which denotes sequence C.

Sample Input

2
1 2
3 4

Sample Output

3 18 

Source

ftiasch

Manager

nanae

题意:  长度为n的a,b序列   求C[k]=∑max(i,j)A[i]⋅B[j]mod(109+7)

题解:  max(i,j) 可以看出 相乘的两个数中一定有a[n]或者b[n]

前缀和处理

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<queue>
 5 #include<stack>
 6 #define ll long long
 7 #define pi acos(-1.0)
 8 #define mod 1000000007
 9 using namespace std;
10 int n;
11 ll a[100005];
12 ll b[100005];
13 ll suma[100005];
14 ll sumb[100005];
15 ll ans;
16 ll gg[100005];
17 int main()
18 {
19     while(scanf("%d",&n)!=EOF)
20     {
21         suma[0]=0;
22         sumb[0]=0;
23         a[0]=0;
24         b[0]=0;
25         for(int i=1;i<=n;i++)
26         {
27             scanf("%d",&a[i]);
28             suma[i]=(suma[i-1]+a[i])%mod;
29         }
30             for(int i=1;i<=n;i++)
31         {
32             scanf("%d",&b[i]);
33             sumb[i]=(sumb[i-1]+b[i])%mod;
34         }
35         ans=0;
36         for(int i=1;i<=n;i++)
37         {
38           ans=((a[i]*b[i]%mod+a[i]*sumb[i-1]%mod+b[i]*suma[i-1]%mod))%mod;
39           gg[i]=ans;
40         }
41         printf("%lld",gg[1]);
42         for(int i=2;i<=n;i++)
43          printf(" %lld",gg[i]);
44          cout<<endl;
45     }
46     return 0;
47 } 
时间: 2024-10-26 20:48:29

ACdream 1029 前缀和的相关文章

Leetcode 1029. 可被 5 整除的二进制前缀

1029. 可被 5 整除的二进制前缀 显示英文描述 我的提交返回竞赛 用户通过次数467 用户尝试次数662 通过次数477 提交次数1964 题目难度Easy 给定由若干 0 和 1 组成的数组 A.我们定义 N_i:从 A[0] 到 A[i] 的第 i 个子数组被解释为一个二进制数(从最高有效位到最低有效位). 返回布尔值列表 answer,只有当 N_i 可以被 5 整除时,答案 answer[i] 为 true,否则为 false. 示例 1: 输入:[0,1,1] 输出:[true,

ACdreamoj 1011(树状数组维护字符串hash前缀和)

题目链接:http://acdream.info/problem? pid=1019 题意:两种操作,第一种将字符串某个位置的字符换为还有一个字符.另外一种查询某个连续子序列是否是回文串: 解法:有两种hash的办法,所以写了两种解法;首先hash是x1 * p^1+ x2*p^2 +x3*p^3...能够用树状数组维护前缀和,维护两个串,一个是正串.还有一个是反串用于比較.比較时候乘以对应的p倍数推断是否相等. 刘汝佳白书上的hash方法处理这道题更复杂:改动i会对后缀j产生的影响为a*p^(

[ACDream 1430]SETI 后缀数组

题目链接:http://acdream.info/problem?pid=1430 题目大意:给你一个长度不超过10000的字符串,问你出现过两次或两次以上的不重叠的子串有多少个. 后缀数组计算出height数组出来,然后分组. 如果没有分在一组的话代表两个的前缀是不相同的.于是就可以暴力搞了. 代码: 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 5 using namespace

acdream 1726 A Math game (部分和问题 DFS剪枝)

A Math game Time Limit: 2000/1000MS (Java/Others) Memory Limit: 256000/128000KB (Java/Others) Problem Description Recently, Losanto find an interesting Math game. The rule is simple: Tell you a numberH, and you can choose some numbers from a set {a[1

AC dreamoj 1011 树状数组+hash维护字符串的前缀和

http://acdream.info/problem?pid=1019 Problem Description Now we have a long long string, and we will have two kinds of operation on it. C i y : change the ith letter to y. Q i j : check whether the substring from ith letter to jth letter is a palindr

ACdream 1148 GCD SUM (久违的莫比乌斯)

题目链接 题意:给出N,M 执行如下程序: long long  ans = 0,ansx = 0,ansy = 0; for(int i = 1; i <= N; i ++) for(int j = 1; j <= M; j ++) if(gcd(i,j) == 1) ans ++,ansx += i,ansy += j; cout << ans << " " << ansx << " " <<

[ACdream] 女神教你字符串——三个气球

Problem Description 女神邀请众ACdream开联欢会,显然作为ACM的佼佼者,气球是不能少的~.女神准备了三种颜色的气球,红色,黄色,绿色(交通信号灯?) 有气球还不能满足女神,女神要在气球上写字. 写什么好呢~?字符串神马的最有爱了~ 女神先拿出一个字符串,然后把字符串的每一个真·前缀写到了黄色气球上面,每一个真·后缀写到了绿色气球上面,每一个真·子串写到了红色气球上面. 对于一个字符串s[1...n],真·前缀为s[1...i](1<=i<n)·,真·后缀为s[j...

COGS 696. [IOI1996][USACO 2.3] 最长前缀

★   输入文件:prefix.in   输出文件:prefix.out   简单对比时间限制:1 s   内存限制:128 MB 描述 USACO 2.3.1 IOI96 在生物学中,一些生物的结构是用包含其要素的大写字母序列来表示的.生物学家对于把长的序列分解成较短的序列(即元素)很感兴趣. 如果一个集合 P 中的元素可以通过串联(元素可以重复使用,相当于 Pascal 中的 “+” 运算符)组成一个序列 S ,那么我们认为序列 S 可以分解为 P 中的元素.元素不一定要全部出现(如下例中B

【BZOJ-1218】激光炸弹 前缀和 + 枚举

1218: [HNOI2003]激光炸弹 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1778  Solved: 833[Submit][Status][Discuss] Description 一种新型的激光炸弹,可以摧毁一个边长为R的正方形内的所有的目标.现在地图上有n(N<=10000)个目标,用整数Xi,Yi(其值在[0,5000])表示目标在地图上的位置,每个目标都有一个价值.激光炸弹的投放是通过卫星定位的,但其有一个缺点,就是其爆破