Time Limit: 10 Sec  Memory Limit: 259 MB
Submit: 1776  Solved: 1055
[Submit][Status][Discuss]

Description

请计算C[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,并且有 n < = 10 ^ 5。 a,b中的元素均为小于等于100的非负整数。

Input

第一行一个整数N,接下来N行,第i+2..i+N-1行,每行两个数,依次表示a[i],b[i] (0 < = i < N)。

Output

输出N行,每行一个整数,第i行输出C[i-1]。

Sample Input

5
3 1
2 4
1 1
2 4
1 4

Sample Output

24
12
10
6
1

HINT

 

Source

题目中给的公式不好搞

我们按照套路,将$B$翻转一下

$$C(k) = \sum_0^n a_i * b_{n - 1 - i + k}$$

此时后面的式子就只与$k$有关了

设$$D(n - 1 + k) = \sum_0^n a_i * b_{n - 1 - i + k}$$

直接NTT

  1. #include<cstdio>
  2. #define swap(x,y) x ^= y, y ^= x, x ^= y
  3. #define LL long long
  4. using namespace std;
  5. const int MAXN = * 1e5 + ;
  6. inline int read() {
  7. char c = getchar(); int x = , f = ;
  8. while(c < '' || c > '') {if(c == '-') f = -; c = getchar();}
  9. while(c >= '' && c <= '') x = x * + c - '',c = getchar();
  10. return x * f;
  11. }
  12. const int P = , g = , gi = ;
  13. int N;
  14. int
  15. LL a[MAXN], b[MAXN], r[MAXN];
  16. LL fastpow(LL a, int p, int mod) {
  17. LL base = ;
  18. while(p) {
  19. if(p & ) base = (base * a) % mod;
  20. a = (a * a) % mod; p >>= ;
  21. }
  22. return base % mod;
  23. }
  24. LL NTT(LL *A, int type, int N, int mod) {
  25. for(int i = ; i < N; i++)
  26. if(i < r[i]) swap(A[i], A[r[i]]);
  27. for(int mid = ; mid < N; mid <<= ) {
  28. LL W = fastpow( (type == ) ? g : gi, (P - ) / (mid << ), mod );
  29. for(int j = ; j < N; j += (mid << )) {
  30. int w = ;
  31. for(int k = ; k < mid; k++, w = (w * W) % P) {
  32. LL x = A[j + k] % P, y = w * A[j + k + mid] % P;
  33. A[j + k] = (x + y) % P;
  34. A[j + k + mid] = (x - y + P) % P;
  35. }
  36. }
  37. }
  38. if(type == -) {
  39. LL inv = fastpow(N, mod - , mod);
  40. for(int i = ; i < N; i++)
  41. A[i] = (A[i] * inv) % mod;
  42. }
  43. }
  44. int main() {
  45. #ifdef WIN32
  46. freopen("a.in","r",stdin);
  47. #endif
  48. N = read();
  49. for(int i = ; i < N; i++)
  50. a[i] = read(), b[N - i] = read();
  51. int limit = , L = ;
  52. while(limit <= N + N) limit <<=, L++;
  53. for(int i = ; i < limit; i++) r[i] = (r[i >> ] >> ) | ((i & ) << (L - ));
  54. NTT(a, , limit, P); NTT(b, , limit, P);
  55. for(int i = ; i < limit; i++) a[i] = (a[i] * b[i]) % P;
  56. NTT(a, -, limit, P);
  57. for(int i = ; i < N * ; i++)
  58. printf("%d\n",a[i] % P);
  59. return ;
  60. }

BZOJ2194: 快速傅立叶之二(NTT,卷积)的更多相关文章

  1. bzoj2194 快速傅立叶之二 ntt

    bzoj2194 快速傅立叶之二 链接 bzoj 思路 对我这种和式不强的人,直接转二维看. 发现对\(C_k\)贡献的数对(i,j),都是右斜对角线. 既然贡献是对角线,我们可以利用对角线的性质了. ...

  2. BZOJ2194: 快速傅立叶之二 FFT_卷积

    Code: #include <cstdio> #include <algorithm> #include <cmath> #include <cstring ...

  3. [bzoj2194]快速傅立叶之二_FFT

    快速傅立叶之二 bzoj-2194 题目大意:给定两个长度为$n$的序列$a$和$b$.求$c$序列,其中:$c_i=\sum\limits_{j=i}^{n-1} a_j\times b_{j-i} ...

  4. bzoj2194: 快速傅立叶之二

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  5. bzoj千题计划256:bzoj2194: 快速傅立叶之二

    http://www.lydsy.com/JudgeOnline/problem.php?id=2194 相乘两项的下标 的 差相同 那么把某一个反过来就是卷积形式 fft优化 #include< ...

  6. BZOJ.2194.快速傅立叶之二(FFT 卷积)

    题目链接 \(Descripiton\) 给定\(A[\ ],B[\ ]\),求\[C[k]=\sum_{i=k}^{n-1}A[i]*B[i-k]\ (0\leq k<n)\] \(Solut ...

  7. BZOJ2194:快速傅立叶之二(FFT)

    Description 请计算C[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,并且有 n < = 10 ^ 5. a,b中的元素均为小于等于100的非 ...

  8. BZOJ2194 快速傅立叶之二 【fft】

    题目 请计算C[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,并且有 n < = 10 ^ 5. a,b中的元素均为小于等于100的非负整数. 输入格式 ...

  9. 2018.11.18 bzoj2194: 快速傅立叶之二(fft)

    传送门 模板题. 将bbb序列反过来然后上fftfftfft搞定. 代码: #include<bits/stdc++.h> #define ri register int using na ...

随机推荐

  1. Android Studio 快速实现上传项目到Github(详细步骤)

    前言: 本文主要讲解如何将Android Studio项目上传至GitHub,在此之前,先介绍几个概念. Android Studio:是谷歌推出一个Android集成开发工具,基于IntelliJ ...

  2. 通过ajax记录打印信息

     润乾自带的打印直接可以通过触发js事件来进行调用.onClick="report1_print();return false;" 如果客户需要记录某个用户在某个时间段进行打印 ...

  3. 让索引包含null值的两种方法

    1. 把有NULL值的列与一个常数,或者一个带有not null约束的列一同索引 create index ind_01 on t01(col01,1); 或者 create index ind_01 ...

  4. Django 请求参数

    Django 请求参数 1.获取URL路径中的参数 需求:假设用户访问127.0.0.1/user/1/2,你想获取1,2.应该怎么操作呢? (1)未命名参数(位置参数) # 在项目下的urls.py ...

  5. 实现serializable接口的作用

    最重要的两个原因是: 1.将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本: 2.按值将对象从一个应用程序域发送至另一个应用程序域. 实现serializable接口的作用是就是可以 ...

  6. Ubuntu 16.04 c++ Google框架单元测试

    环境:Ubuntu 16.04 在github网站上下载gtest框架:终端输入git clone https://github.com/google/googletest.git 然后找到 gool ...

  7. maven问题总结

    1.maven下载jar包速度慢 1.maven下载jar包速度慢(解决办法) 现在maven项目非常流行,因为它对jar实行了一个非常方便的管理,我们可以通过在pom.xml文件中做对应的配置即可将 ...

  8. [VS2008] [.NET 3.5] 如何解决 The imported project "C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.CompactFramework.CSharp.targets" was not found

    重新安装或者修复 NETCFv35PowerToys https://download.microsoft.com/download/f/a/c/fac1342d-044d-4d88-ae97-d27 ...

  9. ffemp语音转码

    分享一款windows上很不错的  程序员专业转码软件 ffemp 首先先下载ffemp转码软件 https://pan.baidu.com/s/10BoahyWJlI9e-_rB_yCiLA 下载之 ...

  10. Office 365 Pass-through身份验证及Seamless Single Sign-On

    Hello 小伙伴们, 这篇文章将视点聚焦在传递身份验证(Pass-through Authentication)上,将分享如何安装,配置和测试Azure Active Directory(Azure ...