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,所以要转化 ...
随机推荐
- cnblog之初来乍到
hello,大家好,我是蓝斯老师 一枚致力于android开发的攻城狮 很荣幸能够在博客园开博(博主以前是混CSDN的,原博客地址http://blog.csdn.net/lancees) 希望将来能 ...
- openssl安装介绍
#因CentOS7默认安装了openssl1.0版本,需要删除该版本,才能安装openssl.1.0.2l版本yum remove -y openssl openssl-devel cd /usr/l ...
- Android学习总结(三)——IntentService的用法
一.IntentService的基本概念 IntentService是继承于Service并处理异步请求的一个类,在IntentService内有一个工作线程来处理耗时操作,启动IntentServi ...
- webpack前端构建工具学习总结(三)之webpack.config.js配置文件
Webpack 在执行的时候,除了在命令行传入参数,还可以通过指定的配置文件来执行.默认情况下,会搜索当前目录的 webpack.config.js 文件,这个文件是一个 node.js 模块,返回一 ...
- UVA - 1279 Asteroid Rangers (动点的最小生成树)
题意,有n个匀速动点,求最小生成树的改变次数. 一句话总结:动态问题的一般做法是先求出一个静态的解,然后求出解发生改变的事件,事件按照时间排序,依次处理. 先求出最开始的最小生成树(MST),当MST ...
- ucosii(2.89)mutex 应用要点
mutex 的创建在于共享资源打交道是可以可以保证满足互斥条件:1,必须保证继承优先级要高于可能与相应共享资源打交道的任务中优先级最高的优先级.2,不要将占有Mutex的任务挂起,也不要让占有mute ...
- Codeforces Round #272 (Div. 2)-C. Dreamoon and Sums
http://codeforces.com/contest/476/problem/C C. Dreamoon and Sums time limit per test 1.5 seconds mem ...
- Ukulele 调音
正常的持琴姿势时,从上到下依次是:4,3,2,1弦,音从上往下是:G,C,E,A: 3弦 - C - Do - D - Re 2弦 - E - Mi - F - Fa 4弦 - G -So 1弦 - ...
- linux 用dd命令读写引导区文件
分类: LINUX 备份MBR,linux下使用如下命令: # dd if=/dev/hda of=/root/linux.bin bs=512 count=1 这里注意使用if=/dev/hda备份 ...
- vue 使用element-ui实现城市三级联动
<template> <div> <el-select v-model="prov" style="width:167px;margin-r ...