题解:

我是参考的

http://blog.csdn.net/qq_32570675/article/details/76571666

这一篇

orz 原来可以这么变换,涨姿势

代码:

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
typedef long long LL;
const int maxn = 1e5 + ;
const int g = ;
const int MOD = ;
LL F[maxn*], G[maxn*], mul[maxn], imul[maxn], ans[maxn], qp[maxn];
int a[maxn]; LL mypow(LL a, LL b){
LL ans = ; for(; b; b >>= ) { if(b&) (ans *= a) %= MOD; (a *= a) %= MOD; } return ans;
} void Modify(LL *a, int L){
for(int i = , j = L/; i < L-; i++){
if(i < j) swap(a[i], a[j]);
int k = L/;
while(j >= k){
j -= k;
k >>= ;
}
if(j < k) j += k;
}
} void NTT(LL *y, int L, int ty){
Modify(y, L);
int id = ;
for(int h = ; h <= L; h <<= ){
id++;
for(int j = ; j < L; j += h){
LL w = ;
for(int k = j; k < j + h/; k++){
LL u = y[k];
LL t = y[k+h/]*w%MOD;
y[k] = (u+t)%MOD;
y[k+h/] = (u-t+MOD)%MOD;
w = w*qp[id]%MOD;
}
}
}
if(ty == -){
for(int i = ; i < L/; i++) swap(y[i], y[L-i]);
LL inv = mypow(L, MOD-);
for(int i = ; i < L; i++)
y[i] = y[i]*inv%MOD;
}
} void init(){
int n = 1e5 + ;
mul[] = imul[] = mul[] = ;
for(int i = ; i <= n; i++) mul[i] = (mul[i-]*i)%MOD;
for(int i = ; i <= n; i++) imul[i] = mypow(mul[i], MOD-);
for(int i = ; i < ; i++){
int t = <<i;
qp[i] = mypow(g, (MOD-)/t);
}
} int main()
{
init();
int n, m, x;
while(cin>>n){
for(int i = ; i <= n; i++) scanf("%d", &a[i]);
cin>>m;
LL b = ;
for(int i = ; i <= m; i++){
scanf("%d", &x);
b -= x;
(b += MOD) %= MOD;
}
memset(F, , sizeof(F));
memset(G, , sizeof(G));
for(int i = ; i <= n; i++){
F[i] = a[n-i]*mul[n-i]%MOD;
G[i] = mypow(b, i)*imul[i]%MOD;
}
int L = , nn = (n+)<<;
while(L < nn) L <<= ;
NTT(F, L, ); NTT(G, L, );
for(int i = ; i < L; i++){
F[i] = (F[i]*G[i])%MOD;
}
NTT(F, L, -);
for(int i = ; i <= n; i++){
(F[i] += MOD) %= MOD;
ans[i] = F[n-i]*imul[i]%MOD;
}
for(int i = ; i <= n; i++) printf("%d ", ans[i]);
cout<<endl;
}
return ;
}

2017 Multi-University Training Contest - Team 3 RXD and functions(NTT)的更多相关文章

  1. 2017 Multi-University Training Contest - Team 3 RXD and dividing(树)

    题解: 其实贪心地算就可以了 一个最优的分配就是每条边权贡献的值为min(k, sz[x]),sz[x]是指子树的大小 然后最后加起来就是答案. #include <iostream> # ...

  2. HDU 6061 RXD and functions(NTT)

    题意 给定一个\(n​\) 次的 \(f​\) 函数,向右移动 \(m​\) 次得到 \(g​\) 函数,第 \(i​\) 次移动长度是 \(a_i​\) ,求 \(g​\) 函数解析式的各项系数,对 ...

  3. 【推导】【NTT】hdu6061 RXD and functions(NTT)

    题意:给定一个n次多项式f(x)的各项系数,让你求f(x-Σai)的各项系数. http://blog.csdn.net/v5zsq/article/details/76780053 推导才是最关键的 ...

  4. 2017 Multi-University Training Contest - Team 3 Kanade's trio(字典树+组合数学)

    题解: 官方题解太简略了orz 具体实现的方式其实有很多 问题就在于确定A[j]以后,如何找符合条件的A[i] 这里其实就是要提前预处理好 我是倒序插入点的,所以要沿着A[k]爬树,找符合的A[i] ...

  5. 2017 Multi-University Training Contest - Team 3 hdu6060 RXD and dividing

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6060 题目: RXD and dividing Time Limit: 6000/3000 M ...

  6. 2017 Multi-University Training Contest - Team 9 1005&&HDU 6165 FFF at Valentine【强联通缩点+拓扑排序】

    FFF at Valentine Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  7. 2017 Multi-University Training Contest - Team 9 1004&&HDU 6164 Dying Light【数学+模拟】

    Dying Light Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Tot ...

  8. 2017 Multi-University Training Contest - Team 9 1003&&HDU 6163 CSGO【计算几何】

    CSGO Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  9. 2017 Multi-University Training Contest - Team 9 1002&&HDU 6162 Ch’s gift【树链部分+线段树】

    Ch’s gift Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

随机推荐

  1. 记js里codePointAt()方法返回的结果的含义。

    经过<字符串的扩展>和<字符编码的那些事>这两篇文章的阅读,大概了解js里codePointAt方法返回结果的含义. var str='

  2. 【linux运维递进】

    ================================云计算和虚拟化=================================== docker openstack svn git ...

  3. 20190105-打印字母C,H,N,口等图像和杨辉三角

    1. 打印字母C ****** * * * * ****** def print_c(n): print('*' * n) for i in range(n): print('* ') print(' ...

  4. 二、Django需要的知识点

    1.请求(request): 客户端到服务器端. 响应(response):服务器端到客户端. HTTP/1.1 协议共定义了 8 种请求方式,分别是: OPTIONS. HEAD. GET. POS ...

  5. 9-C++远征之多态篇-学习笔记

    C++远征之多态篇 面向对象三大特征:封装,继承,多态 多态: 发出一条命令时,不同的对象接收到同样的命令做出的动作不同 多态篇会学习到的目录: 普通虚函数 & 虚析构函数 纯虚函数:抽象类 ...

  6. 【Java】关于Spring框架的总结 (三)

    前文对 Spring IoC 和 Spring AOP 的实现方法进行了整合.如果有不明白的或有质疑的地方可以评论出来,一起探讨问题,帮助别人也是帮助自己!本文探讨的中心主要放在 Spring 的注解 ...

  7. VGA 时序标准

    VGA 显示器扫描方式从屏幕左上角一点开始,从左像右逐点扫描,每扫描完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT 对电子束进行消隐,每行结束时,用行同步信号进行同步:当扫描完所有的行 ...

  8. 3106: [cqoi2013]棋盘游戏

    3106: [cqoi2013]棋盘游戏 链接 分析: 极大极小搜索 + 记忆化. 代码 #include<bits/stdc++.h> using namespace std; type ...

  9. 从C到C++ (2)

    从C到C++ (2) 一.    C++中增加了作用域标示符 :: 1.     用于对局部变量同名的全局变量进行访问. 2.     用于表示类成员. 二.    new.delete运算符 1.  ...

  10. VS2013生产过程问题及解决

    TRK0002错误 现象:编译器.链接器交替报错,不能正常生成 环境:Win8.1 + VS2013 + 百度杀毒 解决:退出百度杀毒,重启VS,再进行生成 修订:发现问题依旧,经过多次试验,发现与杀 ...