hdu6061[NTT推公式] 2017多校3
/*hdu6061[NTT推公式] 2017多校3*/
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL MOD = ;
const int MAX_N = ;
int n, m, temp;
LL a;
LL inv[];
LL Finv[];
LL F[];
LL A[], B[], C[];
LL quickPow(LL x, LL n, LL MOD) {
LL ans = ;
for (; n; n >>= ) {
if (n & ) ans = (ans * x) % MOD;
x = (x * x) % MOD;
}
return ans;
} void inv_init() {
inv[] = ;
for (int i = ; i <= MAX_N; ++i) {
inv[i] = (MOD - MOD / i) * inv[MOD % i] % MOD;
}
F[] = Finv[] = ;
for (int i = ; i <= MAX_N; ++i) {
F[i] = F[i - ] * 1LL * i % MOD;
Finv[i] = Finv[i - ] * 1LL * inv[i] % MOD;
}
}
/*
ntt.run(a, len, 1, MOD);
ntt.run(b, len, 1, MOD);
REP(0, len) c[i] = a[i] * b[i] % MOD;
ntt.run(c, len, -1, MOD);
*/
struct NTT {
enum {g = };
// @private
int rev(int x, int r) {
int ans = ;
for (int i = ; i < r; i++) {
if (x & ( << i)) ans += << (r - i - );
}
return ans;
}
// @public
void run(LL a[], int n, int on, LL MOD) {
int r = (int)log2(n + 1e-);
for (int i = ; i < n; i++) {
int tmp = rev(i, r);
if (i < tmp) swap(a[i], a[tmp]);
}
for (int s = ; s <= r; s++) {
int m = << s;
LL wn = quickPow(g, (MOD - ) / m, MOD);
for (int k = ; k < n; k += m) {
LL w = ;
for (int j = ; j < (m >> ); j++) {
LL t = w * (a[k + j + (m >> )] % MOD) % MOD, u = a[k + j] % MOD;
a[k + j] = (u + t) % MOD;
a[k + j + (m >> )] = ((u - t) % MOD + MOD) % MOD;
w *= wn; w %= MOD;
}
}
}
if (on < ) {
for (int i = ; i < (n >> ); i++) swap(a[i], a[n - i]);
LL inv = quickPow(n, MOD - , MOD);
for (int i = ; i < n; i++) a[i] = a[i] % MOD * inv % MOD;
}
}
} ntt;
int main() {
inv_init();
while (~scanf("%d", &n)) {
a = ;
for (int i = ; i <= n; i++) {
scanf("%lld", &C[i]);
}
scanf("%d", &m);
for (int i = ; i < m; i++) {
scanf("%d", &temp);
a -= temp;
if (a <= ) a += MOD;
}
LL temp = 1LL;
int len = ; while (len < ( * n)) len <<= ;
for (int i = ; i < len; i++) {
if (i <= n) {
A[i] = temp * Finv[i] % MOD;
B[i] = F[n - i] * C[n - i] % MOD;
}
else A[i] = B[i] = ;
temp = (temp * a) % MOD;
}
ntt.run(A, len, , MOD);
ntt.run(B, len, , MOD);
for (int i = ; i < len; i++) {
A[i] = (A[i] * B[i]) % MOD;
}
ntt.run(A, len, -, MOD);
for (int i = ; i <= n; i++) {
//cout << A[i] << endl;
A[i] = (A[i] % MOD + MOD) % MOD * Finv[n - i] % MOD;
}
for (int i = ; i <= n; i++) {
printf("%lld ", A[n - i]);
}
puts("");
}
return ;
}
hdu6061[NTT推公式] 2017多校3的更多相关文章
- hdu6078[优化递推过程] 2017多校4
这道题一眼看过去好像和最长公共子序列有点像. 一开始只想到暴力的推法, 令dp[i][j][k]表示 a[i]=b[j](即以ai,bj为结尾的波浪序列的方案数), 且最终状态为k(0,1分别代表下降 ...
- 2017多校第7场 HDU 6128 Inverse of sum 推公式或者二次剩余
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6128 题意:给你n个数,问你有多少对i,j,满足i<j,并且1/(ai+aj)=1/ai+1/a ...
- 2019牛客多校第二场 A Eddy Walker(概率推公式)
2019牛客多校第二场 A Eddy Walker(概率推公式) 传送门:https://ac.nowcoder.com/acm/contest/882/A 题意: 给你一个长度为n的环,标号从0~n ...
- HDU 4870 Rating(概率、期望、推公式) && ZOJ 3415 Zhou Yu
其实zoj 3415不是应该叫Yu Zhou吗...碰到ZOJ 3415之后用了第二个参考网址的方法去求通项,然后这次碰到4870不会搞.参考了chanme的,然后重新把周瑜跟排名都反复推导(不是推倒 ...
- 2017 多校5 Rikka with String
2017 多校5 Rikka with String(ac自动机+dp) 题意: Yuta has \(n\) \(01\) strings \(s_i\), and he wants to know ...
- 2017 多校3 hdu 6061 RXD and functions
2017 多校3 hdu 6061 RXD and functions(FFT) 题意: 给一个函数\(f(x)=\sum_{i=0}^{n}c_i \cdot x^{i}\) 求\(g(x) = f ...
- hdu6069[素数筛法] 2017多校4
对于[l , r]内的每个数,根据唯一分解定理有 所以有 因为 //可根据唯一分解定理推导 所以 题目要求 就可以运用它到上述公式 (注意不能暴力对l,r内的数一个个分解算贡献 ...
- HDU 4873 ZCC Loves Intersection(JAVA、大数、推公式)
在一个D维空间,只有整点,点的每个维度的值是0~n-1 .现每秒生成D条线段,第i条线段与第i维度的轴平行.问D条线段的相交期望. 生成线段[a1,a2]的方法(假设该线段为第i条,即与第i维度的轴平 ...
- HDU 5047 推公式+别样输出
题意:给n个‘M'形,问最多能把平面分成多少区域 解法:推公式 : f(n) = 4n(4n+1)/2 - 9n + 1 = (8n+1)(n-1)+2 前面部分有可能超long long,所以要转化 ...
随机推荐
- 如何设置文件审计软件FileAudit的浏览选项
FileAudit允许用户从审计访问事件中排除掉某些特定事件,用户可以把对于自身来说不敏感的文件审计访问事件设定在这些派出范围之类,这样一来就FileAudit就会自动过滤掉这些不明感时间,以便节约用 ...
- freebsd安装ports
/etc/portsnap.conf 里面更改 SERVERNAME=portsnap.hshh.org portsnap的命令比较少 fetch 获取数据 extract 释放全部ports upd ...
- 玄学C语言之scanf,printf
#include <bits/stdc++.h> using namespace std; int main() { int a,c,d; ]; scanf("%d." ...
- 第009课 gcc和arm-linux-gcc和MakeFile
from:第009课 gcc和arm-linux-gcc和MakeFile 第001节_gcc编译器1_gcc常用选项_gcc编译过程详解 gcc的使用方法 gcc [选项] 文件名 gcc常用选项 ...
- vue计算属性无法监听到数组内部变化
计算属性可以帮助我们简化代码,做到实时更新,不用再自己添加function去修改data. 首先看一下计算属性的基本写法(摘自官网) var vm = new Vue({ el: '#demo', d ...
- shell脚本,对MySQL数据库进行分库加分表备份
[root@localhost wyb]# cat table_backup.sh #!/bin/bash flag= user=root pass=test mysql -u$user -p&quo ...
- Shell脚本中时间处理
Shell脚本中时间处理 1.脚本内容 #!/bin/bash #环境变量 #设置环境变量和sql文件格式相符 source /etc/profileexport LD_LIBRARY_PATH=&q ...
- touch-action css属性 滚动和缩放手势
CSS 属性 touch-action 用于指定某个给定的区域是否允许用户操作,以及如何响应用户操作(比如浏览器自带的划动,缩放等) 默认情况下,平移(滚动) 和 缩放手势由浏览器专门处理.该属性用于 ...
- (40)zabbix监控web服务器访问性能
zabbix web监控介绍 在host列可以看到web(0),在以前的版本这项是独立出来的,这个主要实现zabbix对web性能的监控,通过它可以了解web站点的可用性以及性能. 最终将各项指标绘制 ...
- 虚拟dom和diff算法
https://github.com/livoras/blog/issues/13 这里简单记录一些要点和理解: 一个dom元素中有许多属性,操作dom是很耗资源的,而操作自定义的js对象是很高效.所 ...