【推导】【NTT】hdu6061 RXD and functions(NTT)
题意:给定一个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的原根都是3n=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;
}
转载于:https://www.cnblogs.com/autsky-jadek/p/7546037.html
【推导】【NTT】hdu6061 RXD and functions(NTT)相关推荐
- RXD and functions HDU-6061 NTT
RXD and functions solution gm=f(x−∑i=1mai),令A=∑i=1mai,则有,g_m=f(x-\sum\limits_{i=1}^{m}a_i),令A=\sum\l ...
- HDU 6061 RXD and functions(NTT)
RXD and functions 首先是有一个结论,对多项式做任意多次 transformation ,其结果跟做一次 transformation Tr(f,∑i=1mai)Tr(f, \sum\ ...
- 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 ...
- UCloud与NTT达成合作,提供可靠跨地域混合云服务
近日,UCloud宣布与NTT Communications东亚地区总部NTT Com Asia (以下简称"NTT Com Asia") 达成合作伙伴协议.双方将发挥各自优势,通 ...
- 洛谷.4245.[模板]任意模数NTT(MTT/三模数NTT)
题目链接 三模数\(NTT\): 就是多模数\(NTT\)最后\(CRT\)一下...下面两篇讲的都挺明白的. https://blog.csdn.net/kscla/article/details/ ...
- [快速数论变换 NTT]
先粘一个模板.这是求高精度乘法的 #include <bits/stdc++.h> #define maxn 1010 using namespace std;char s[maxn];t ...
- P4245 【模板】任意模数NTT
Luogu4245 只要做三次的NTT,快的飞起 普通NTT,做9次 #include<cstdio> #include<cstring> #include<iostre ...
- 2021HDU多校8 - 7057 Buying Snacks(矩阵快速幂套NTT优化dp)
题目链接:点击查看 题目大意:给出 nnn 种糖果,每种糖果有大小包装之分,有三种购买方案,价钱分别如下: 单独购买一个小的,花费一块钱 单独购买一个大的,花费两块钱 ∀i>1\forall i ...
- 牛客挑战赛53G-同源数组(Easy Version)【NTT】
正题 题目链接:https://ac.nowcoder.com/acm/contest/11193/G 题目大意 给出nnn个长度为mmm的数组,然后你每次可以进行差分(不会改变数组长度那种)和前缀和 ...
最新文章
- NAPI模式--中断和轮询的折中以及一个负载均衡的问题
- python知识合集
- 数据结构学习笔记(2)
- 为梦想而战,高考励志主题教育班会PPT
- 201107阶段二Linux-qt编程
- 15种主要编程语言介绍及应用场合
- Android应用开发—知识点汇总
- python dataframe 取每行的最大值,在python数据框中的每一行中查找最大值
- Python中list(列表)
- socket 怎么设置心跳判断连接
- Unity3d LED数码管单表控制/多表控制
- 乔布斯简介及其十大经典语录
- RSAT(Regulatory Sequence Analysis Tools)详解
- 解决笔记本连接wifi提示无法连接这个网络问题
- 石墨笔记,熊掌记和 Effie 哪个更适合采编?
- C++语言学习(十四)——C++类成员函数调用分析
- 生活中的一些常用理论
- Linux 安装MySql 步骤
- Windows系统封装初始化工具sysprep
- JSTL(c标签)与Struts2(s标签)标签
热门文章
- EasyUI中进度条的简单使用
- Flutter 构建一个完整的聊天应用程序
- Linux下Tcp保活时间默认多少,C/C++网络编程中的TCP保活
- 写一个“特殊”的查询构造器 - (四、条件查询:复杂条件)
- 竞品调研时发现的Android新设计特性
- (二)线程同步_3---在类中使用相互独立的属性同步
- logic.c:1:9: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘’ token...
- RDIFramework.NET ━ .NET快速信息化系统开发框架-4.3 平台主界面
- 科学家公布地球“裸照”
- communication with respect to scholars