题意:给定一个n次多项式f(x)的各项系数,让你求f(x-Σai)的各项系数。

http://blog.csdn.net/v5zsq/article/details/76780053

推导才是最关键的部分……我的数学推导能力很弱,比赛的时候很难推出来……尤其是累加变量交换顺序、换元这两个常用的技巧在配凑卷积形式以及莫比乌斯反演中都很常用

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
#define N ((1<<18)+5)
#define MOD 998244353ll
ll Quick_Pow(ll a,ll p){
if(p==0){
return 1ll;
}
ll res=Quick_Pow(a,p>>1);
res=res*res%MOD;
if((p&1ll)==1ll){
res=(a%MOD*res)%MOD;
}
return res;
}
struct NTT{
int n,rev[N];
ll g;
void ini(int lim) {
g=3;//1004535809,998244353的原根都是3
n=1;
int k=0;
while(n<lim){
n<<=1;
++k;
}
for(int i=0;i<n;++i){
rev[i]=((rev[i>>1]>>1)|((i&1)<<(k-1)));
}
}
void dft(ll a[],int DFT) {
for(int i=0;i<n;++i){
if(i<rev[i]){
swap(a[i],a[rev[i]]);
}
}
for(int l=2;l<=n;l<<=1){
int m=l>>1;
ll wn=Quick_Pow(g,DFT==1 ? (MOD-1ll)/(ll)l : MOD-1ll-(MOD-1ll)/(ll)l);
for(int i=0;i<n;i+=l){
ll w=1;
for(int k=0;k<m;++k){
ll t=w*a[i+k+m]%MOD;
a[i+k+m]=(a[i+k]-t+MOD)%MOD;
a[i+k]=(a[i+k]+t)%MOD;
w=w*wn%MOD;
}
}
}
if(DFT==-1){
ll inv=Quick_Pow(n,MOD-2ll);
for(int i=0;i<n;++i){
a[i]=a[i]*inv%MOD;
}
}
}
void mul(ll a[],ll b[],int len) {
ini(len);
dft(a,1);
dft(b,1);
for(int i=0;i<n;++i){
a[i]=a[i]*b[i];
}
dft(a,-1);
}
}ntt;
ll c[N],A[N],B[N],jc[N],jcni[N];
int n,m;
int main(){
jc[0]=1;
jcni[0]=1;
for(int i=1;i<=100000;++i){
jc[i]=(jc[i-1]*(ll)i)%MOD;
jcni[i]=Quick_Pow(jc[i],MOD-2ll);
}
ll x;
// freopen("hdu6061.in","r",stdin);
while(scanf("%d",&n)!=EOF){
memset(A,0,sizeof(A));
memset(B,0,sizeof(B));
for(int i=0;i<=n;++i){
scanf("%lld",&c[i]);
}
ll a=0;
scanf("%d",&m);
for(int i=1;i<=m;++i){
scanf("%lld",&x);
a=(a+x)%MOD;
}
ll pw=1;
for(int i=0;i<=n;++i){
A[i]=(c[n-i]*jc[n-i])%MOD;
B[i]=(pw*jcni[i])%MOD;
pw=(pw*(MOD-a))%MOD;
}
ntt.mul(A,B,n*2+1);
for(int i=0;i<=n;++i){
printf("%lld ",(A[n-i]*jcni[i])%MOD);
}
puts("");
}
return 0;
}

【推导】【NTT】hdu6061 RXD and functions(NTT)的更多相关文章

  1. HDU6061 RXD and functions【NTT】

    \(RXD\ and\ functions\) Problem Description RXD has a polynomial function \(f(x)\), \(f(x)=\sum ^{n} ...

  2. HDU 6061 RXD and functions NTT

    RXD and functions Problem Description RXD has a polynomial function f(x), f(x)=∑ni=0cixiRXD has a tr ...

  3. HDU 6061 - RXD and functions | 2017 Multi-University Training Contest 3

    每次NTT都忘记初始化,真的是写一个小时,Debug两个小时- - /* HDU 6061 - RXD and functions [ NTT ] | 2017 Multi-University Tr ...

  4. 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 ...

  5. HDU 6061 RXD and functions(NTT)

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

  6. 2017 Multi-University Training Contest - Team 3 RXD and functions(NTT)

    题解: 我是参考的 http://blog.csdn.net/qq_32570675/article/details/76571666 这一篇 orz 原来可以这么变换,涨姿势 代码: #includ ...

  7. HDU 6061 RXD and functions

    题目链接:HDU-6061 题意:给定f(x),求f(x-A)各项系数. 思路:推导公式有如下结论: 然后用NTT解决即可. 代码: #include <set> #include < ...

  8. 【Tarjan】【LCA】【动态规划】【推导】hdu6065 RXD, tree and sequence

    划分出来的每个区间的答案,其实就是连续两个的lca的最小值. 即5 2 3 4 这个区间的答案是min(dep(lca(5,2)),dep(lca(2,3),dep(lca(3,4)))). 于是dp ...

  9. hdu6061[NTT推公式] 2017多校3

    /*hdu6061[NTT推公式] 2017多校3*/ #include <bits/stdc++.h> using namespace std; typedef long long LL ...

随机推荐

  1. elementui table 多选 获取id

    //多选相关方法 toggleSelection(rows) { if (rows) { rows.forEach(row => { this.$refs.multipleTable.toggl ...

  2. python进行机器学习(二)之特征选择

    毫无疑问,解决一个问题最重要的是恰当选取特征.甚至创造特征的能力,这叫做特征选取和特征工程.对于特征选取工作,我个人认为分为两个方面: 1)利用python中已有的算法进行特征选取. 2)人为分析各个 ...

  3. python中的binascii模块

    binascii模块拿来干嘛的? 答:进制转换xxoo #!/usr/bin/env python # encoding:utf-8 # by i3ekr import binascii s = &q ...

  4. ACdream 1157 Segments CDQ分治

    题目链接:https://vjudge.net/problem/ACdream-1157 题意: Problem Description 由3钟类型操作: 1)D L R(1 <= L < ...

  5. 2.C 基础

    C 基础 原文地址:http://rypress.com/tutorials/objective-c/c-basics OC 可以说是C语言的一个超集,这样你可以无缝的和C语言结合编程也就是你可以这两 ...

  6. IE11中实现颜色渐变

    background: -ms-linear-gradient(left,#daa23e,#ad7f27); 下面是css3中颜色渐变对各个浏览器的写法:background: -webkit-lin ...

  7. C++智能指针: auto_ptr, shared_ptr, unique_ptr, weak_ptr

    本文参考C++智能指针简单剖析 内存泄露 我们知道一个对象(变量)的生命周期结束的时候, 会自动释放掉其占用的内存(例如局部变量在包含它的第一个括号结束的时候自动释放掉内存) int main () ...

  8. django开发项目实例2--如何链接图片和css文件(静态文件)

    在上一篇随笔里面,我们已经介绍了如何从零开始用django建立一个项目并且初步运行以来了, 现在我们就要开始写我们的html了,也就是django里面的模板了,不过这节我们只讲如何链接图片和css(静 ...

  9. C# 实现动态添加列,新增合计行,求和

    DataTable da = CommonBLL.GetList("*", "sys_dict", "IfState=1 and DictTypeId ...

  10. hdu 1325(并查集)

    Is It A Tree? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...