HDU6061 RXD and functions【NTT】
\(RXD\ and\ functions\)
Problem Description
RXD has a polynomial function \(f(x)\), \(f(x)=\sum ^{n}_{i=0}c_ix_i\)
RXD has a transformation of function \(Tr(f,a)\), it returns another function g, which has a property that \(g(x)=f(x−a)\).
Given \(a_1,a_2,a_3,…,a_m\), RXD generates a polynomial function sequence \(g_i\), in which \(g_0=f\) and \(g_i=Tr(g_{i−1},a_i)\)
RXD wants you to find \(g_m\), in the form of \(\sum ^{m}_{i=0}b_ix_i\)
You need to output bi module \(998244353.\)
\(n≤10^5\)
Input
There are several test cases, please keep reading until EOF.
For each test case, the first line consists of \(1\) integer \(n\), which means \(deg\ F\).
The next line consists of \(n+1\) intergers \(c_i\),\(0 \le ci<998244353\), which means the coefficient of the polynomial.
The next line contains an integer \(m\), which means the length of \(a\).
The next line contains \(m\) integers, the \(i\) - th integer is \(a_i\).
There are \(11\) test cases.
\(0\le ai<998244353\)
\(\sum m\le10^5\)
Output
For each test case, output an polynomial with degree n, which means the answer.
Sample Input
2
0 0 1
1
1
Sample Output
1 998244351 1
Hint
\((x - 1) ^ 2 = x^2 - 2x + 1\)
题解:
显然最终操作完的式子为\(\sum_{i=0}^{n}c_i(x-\sum_{i-1}^{m}a_i)^i\)
现在我们记\((-\sum_{i=1}^{m}a_i)\%MOD=a\)
然后变成这样:
\(\sum_{i=0}^{n}c_i(x-a)^i\)
接下来我们对式子进行二项式展开:
\(\sum_{i=0}^{n}\sum_{j=i}^{n}C(j,j-i)c_j\cdot a^{j-i}\cdot x^i\)
用\(j=j-i\)替换\(j\):
\(\sum_{i=0}^{n}\sum_{j=0}^{n-i}C(j+i,j)\cdot c_{j+i}\cdot a^j\cdot x^j\)
把组合数展开:
\(\sum_{i=0}^{n}\sum_{j=0}^{n-i}\frac{(i+j)!}{i!\cdot j!}c_{i+j}\cdot a^j\cdot x^j\)
整理一下,把和内层求和无关的提到外面来得到:
\(\sum_{i=0}^{n}\frac{x^i}{i!}\sum_{j=0}^{n-i}c_{i+j}\cdot (i+j)!\cdot\frac{a^j}{j!}\)
现在我们先怎么转化里面的式子,使之变成卷积的形式:
\(\sum_{j=0}^{n-i}c_{i+j}\cdot (i+j)!\cdot\frac{a^j}{j!}\)
用\(j+k=n-i\)来做替换:
\(\Rightarrow \sum_{j+k=n-i} c_{n-k}\cdot (n-k)!\cdot \frac{a^j}{j!}\)
发现这个式子就是卷积的形式了
令\(A[n]=\sum c_{n-i}\cdot (n-i)!\)
\(B[n]=\sum \frac{a^i}{i!}\)
\(NTT\)来搞即可
//#pragma GCC optimize("O3")
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<bits/stdc++.h>
using namespace std;
function<void(void)> ____ = [](){ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);};
const int MAXN = 1e6+7;
using LL = int_fast64_t;
const LL MOD = 998244353;
const LL g = 3;
int n,limit,m,l,r[MAXN];
LL fact[MAXN],rfact[MAXN],c[MAXN],A[MAXN],B[MAXN];
LL qpow(LL a, LL b){
LL ret = 1;
while(b){
if(b&1) ret = ret * a % MOD;
b >>= 1;
a = a * a % MOD;
}
return ret;
}
LL inv(LL x){ return qpow(x,MOD-2); }
void NTT(LL arr[], int rev){
for(int i = 0; i < limit; i++) if(i<r[i]) swap(arr[i],arr[r[i]]);
for(int len = 1; len < limit; len <<= 1){
LL wn = qpow(g,(MOD-1)/(len<<1));
if(rev==-1) wn = inv(wn);
for(int R = 0; R < limit; R += (len<<1)){
LL w = 1;
for(int i = R; i < R + len; i++){
LL x = arr[i];
LL y = w * arr[i+len] % MOD;
arr[i] = (x+y)%MOD;
arr[i+len] = (x-y+MOD)%MOD;
w = w * wn % MOD;
}
}
}
}
void solve(){
LL a = 0;
for(int i = 0; i <= n; i++) scanf("%I64d",&c[i]);
scanf("%d",&m);
for(int i = 1; i <= m; i++){
int x; scanf("%d",&x);
a -= x;
if(a<0) a += MOD;
}
limit = 1, l = 0;
while(limit<=(n<<1)) limit <<= 1, l++;
for(int i = 0; i < limit; i++) r[i] = ((r[i>>1]>>1) | ((i&1)<<(l-1)));
LL powa = 1;
for(int i = 0; i < limit; i++){
if(i<=n){
A[i] = fact[n-i] * c[n-i] % MOD;
B[i] = powa * rfact[i] %MOD;
powa = powa * a % MOD;
}
else A[i] = B[i] = 0;
}
NTT(A,1); NTT(B,1);
for(int i = 0; i < limit; i++) A[i] = A[i] * B[i] % MOD;
NTT(A,-1);
for(int i = 0; i < limit; i++) A[i] = A[i] * inv(limit) % MOD;
for(int i = 0; i <= n; i++) printf("%I64d ",A[n-i]*rfact[i]%MOD); puts("");
}
int main(){
fact[0] = 1; for(int i = 1; i < MAXN; i++) fact[i] = i * fact[i-1] % MOD;
rfact[MAXN-1] = inv(fact[MAXN-1]);
for(int i = MAXN - 2; i >= 0; i--) rfact[i] = rfact[i+1] * (i+1) % MOD;
while(scanf("%d",&n)!=EOF) solve();
return 0;
}
HDU6061 RXD and functions【NTT】的更多相关文章
- 【推导】【NTT】hdu6061 RXD and functions(NTT)
题意:给定一个n次多项式f(x)的各项系数,让你求f(x-Σai)的各项系数. http://blog.csdn.net/v5zsq/article/details/76780053 推导才是最关键的 ...
- 【NTT】loj#6261. 一个人的高三楼
去年看过t老师写这题博客:以为是道神仙题 题目大意 求一个数列的$k$次前缀和.$n\le 10^5$. 题目分析 [计数]cf223C. Partial Sums 加强版.注意到最后的式子是$f_i ...
- POJ 1080 Human Gene Functions 【dp】
题目大意:每次给出两个碱基序列(包含ATGC的两个字符串),其中每一个碱基与另一串中碱基如果配对或者与空串对应会有一个分数(可能为负),找出一种方式使得两个序列配对的分数最大 思路:字符串动态规划的经 ...
- luogu3723 [AH2017/HNOI2017]礼物 【NTT】
题目 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她.每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度.但是在她生日的前一天, ...
- 5.24 Declaring Attributes of Functions【转】
转自:https://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Function-Attributes.html 5.24 Declaring Attributes o ...
- Luogu4491 [HAOI2018]染色 【容斥原理】【NTT】
题目分析: 一开始以为是直接用指数型生成函数,后来发现复杂度不对,想了一下容斥的方法. 对于有$i$种颜色恰好出现$s$次的情况,利用容斥原理得到方案数为 $$\binom{m}{i}\frac{P_ ...
- CF528D Fuzzy Search 【NTT】
题目链接 CF528D 题解 可以预处理出\(S\)每个位置能匹配哪些字符 对每种字符 构造两个序列 如果\(S[i]\)可以匹配该字符,则该位置为\(0\),否则为\(1\) 如果\(T[i]\)可 ...
- HDU 6061 RXD and functions(NTT)
题意 给定一个\(n\) 次的 \(f\) 函数,向右移动 \(m\) 次得到 \(g\) 函数,第 \(i\) 次移动长度是 \(a_i\) ,求 \(g\) 函数解析式的各项系数,对 ...
- 【NTT】hdu1402 A * B Problem Plus
r·2^k+1 r k g 3 1 1 2 5 1 2 2 17 1 4 3 97 3 5 5 193 3 6 5 257 1 8 3 7681 15 9 17 12289 3 12 11 40961 ...
随机推荐
- golang遍历时修改被遍历对象
目录 前言 遍历切片 遍历map 总结 前言 很多时候需要将遍历对象中去掉某些元素,或者往遍历对象中添加元素,这时候就需要小心操作了. 对于go语言中的一些注意事项我做了总结和示例,留下点笔记. 遍历 ...
- 牛客剑指Offer-数字在升序数组中出现的次数
题目 统计一个数字在升序数组中出现的次数. 示例1 输入 [1,2,3,3,3,3,4,5],3 返回值 4 题解 第一种最简单的方法是O(n)复杂度.遍历数组统计结果. public int Get ...
- 虚拟机Linux安装Oracle容器并实现局域网其他主机访问查询
该文涉及Docker下Oracle容器的安装,主机端口的设置实现局域网内终端均能连接上Oracle数据库,图解如下: 一.关于Docker安装oracle容器可以参考下面博文: https://blo ...
- Linux应急响应--入侵排查
1.入侵者可能会删除机器的日志信息,可以查看日志信息是否还存在或者是否被清空,相关命令示例: ll -h /var/log/* 系统日志一般都存在/var/log下常用的系统日志如下:核心启动日志: ...
- springboot 和 mongdb连接问题 Exception in thread "main" com.mongodb.MongoSecurityException:
1 Exception in thread "main" com.mongodb.MongoSecurityException: Exception authenticating ...
- Ubuntu16.04安装MySQL8.0
1.Ubuntu换源(阿里云) sudo cp /etc/apt/sources.list /etc/apt/sources.list.baksudo vi /etc/apt/sources.list ...
- STM32延时函数的四种方法
单片机编程过程中经常用到延时函数,最常用的莫过于微秒级延时delay_us()和毫秒级delay_ms().本文基于STM32F207介绍4种不同方式实现的延时函数. 1.普通延时 这种延时方式应该是 ...
- Py-re正则模块,log模块,config模块,哈希加密
9.re正则表达式模块,用于字符串的模糊匹配 元字符: 第一:点为通配符 用.表示匹配除了换行符以外的所有字符 import re res=re.findall('a..x','adsxwassxdd ...
- 如何配置 Slf4j
一,前言 日常开发中经常需要在控制台输出一些信息,如果这些东西不加管理,那么很容易就被输出信息淹没.幸好,我们有日志相关的库来帮助我们格式化控制台的输出. 这篇文章将介绍如何配置 Slf4j 及其具体 ...
- error: Failed dependencies: rpm安装包失败报错依赖包
error: Failed dependencies: mysql-community-release conflicts with (installed) mysql57-community-rel ...