2015年的题,应该是将形式幂级数引入国内的元老级题目。

大意:给定一个大小为m的正整数序列和n,问有多少种选法可以凑成n,每个数可以选多次,种类不同算不同方案。$n,m,C \leqslant 100000$

首先处理出生成函数$C$,设答案的形式幂级数为$F$,有递推式$F_n=\sum F_{n-k}*C_k$。
因为这个问题,导致完全不可以用分治解决了。所以我们重新从$C$的角度考虑:
角度一:$$F=1+C+C^2+C^3+...=\frac{1-C^\infty}{1-C}$$角度二:$$F=FC+1$$最后都有:$$F=\frac{1}{1-C}$$
这样就是一个裸的多项式求逆问题了。
模数$1005060097$的原根是$5$。多项式有无逆元取决于其常数项有无逆元,显然这题正好保证了$1-C$的常数项为$1$
再次提醒:次数界开两倍,复杂度:$$T(n)=O(n\log n)+T(n/2)=O(n\log n)$$不过基于常数问题还是不要把它看成一个$log$比较好。

 1 #include<cstdio>
 2 #include<algorithm>
 3 #define rep(i,l,r) for (int i=l; i<=r; i++)
 4 using namespace std;
 5
 6 const int N=400100,mod=1005060097,g=5;
 7 int n,m,x,rev[N],tmp[N],a[N],b[N],c[N],ic[N],lg[N];
 8
 9 int ksm(int a,int b){
10     int res;
11     for (res=1; b; a=1ll*a*a%mod,b>>=1)
12         if (b & 1) res=1ll*res*a%mod;
13     return res;
14 }
15
16 void DFT(int a[],int n,int f){
17     for (int i=0; i<n; i++) if (i<rev[i]) swap(a[i],a[rev[i]]);
18     for (int i=1; i<n; i<<=1){
19         int wn=ksm(g,(f==1) ? (mod-1)/(i<<1) : (mod-1)-(mod-1)/(i<<1));
20         for (int p=i<<1,j=0; j<n; j+=p){
21             int w=1;
22             for (int k=0; k<i; k++,w=1ll*w*wn%mod){
23                 int x=a[j+k],y=1ll*w*a[i+j+k]%mod; a[j+k]=(x+y)%mod; a[i+j+k]=(x-y+mod)%mod;
24             }
25         }
26     }
27     if (f==1) return;
28     int inv=ksm(n,mod-2);
29     for (int i=0; i<n; i++) a[i]=1ll*a[i]*inv%mod;
30 }
31
32 void get(int a[],int b[],int l){
33     if (l==1){ b[0]=ksm(a[0],mod-2); return; }
34     get(a,b,l>>1); int n=l<<1;
35     for (int i=0; i<l; i++) tmp[i]=a[i],tmp[i+l]=0;
36     for (int i=0; i<n; i++) rev[i]=(rev[i>>1]>>1)|((i&1)<<(lg[n]-1));
37     DFT(tmp,n,1); DFT(b,n,1);
38     for (int i=0; i<n; i++) tmp[i]=1ll*b[i]*(2-1ll*tmp[i]*b[i]%mod+mod)%mod;
39     DFT(tmp,n,-1);
40     for (int i=0; i<l; i++) b[i]=tmp[i],b[i+l]=0;
41 }
42
43 int main(){
44     freopen("polypeptide.in","r",stdin);
45     freopen("polypeptide.out","w",stdout);
46     scanf("%d%d",&n,&m); c[0]=1;
47     rep(i,2,n<<2) lg[i]=lg[i>>1]+1;
48     rep(i,1,m) scanf("%d",&x),c[x]++;
49     rep(i,1,n) c[i]=mod-c[i];
50     for (m=1; m<=n; m<<=1); get(c,ic,m);
51     printf("%d\n",ic[n]);
52     return 0;
53 }

转载于:https://www.cnblogs.com/HocRiser/p/8776970.html

[Nescafé41]异化多肽(多项式求逆元)相关推荐

  1. BZOJ 3456: 城市规划 [多项式求逆元 DP]

    题意: 求出n个点的简单(无重边无自环)无向连通图数目. 方案数mod 1004535809(479 * 2 ^ 21 + 1)即可. n<=130000 DP求方案 g(n) n个点所有图的方 ...

  2. bzoj 3456: 城市规划【NTT+多项式求逆】

    参考:http://blog.miskcoo.com/2015/05/bzoj-3456 首先推出递推式(上面的blog讲的挺清楚的),大概过程是正难则反,设g为n个点的简单(无重边无自环)无向图数目 ...

  3. 解题报告(三)多项式求值与插值(拉格朗日插值)(ACM / OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  4. 【学习笔记】超简单的多项式求指(含泰勒展开式、牛顿迭代完成证明)

    整理的算法模板合集: ACM模板 目录 多项式求指 泰勒展开式 牛顿迭代 牛顿迭代应用 P4726 [模板]多项式指数函数(多项式 exp) 数组版 (1.64s) vector版 (960 ms) ...

  5. 【BZOJ】3456: 城市规划 动态规划+多项式求逆

    [题意]求n个点的带标号无向连通图个数 mod 1004535809.n<=130000. [算法]动态规划+多项式求逆 [题解]设$g_n$表示n个点的无向图个数,那么显然 $$g_n=2^{ ...

  6. 【BZOJ】3456: 城市规划(多项式求ln)

    题解 在我写过分治NTT,多项式求逆之后 我又一次写了多项式求ln 我们定义一个数列的指数型生成函数为 \(\sum_{i = 0}^{n} \frac{A_{i}}{i!} x^{i}\) 然后这个 ...

  7. luogu P4238 多项式求逆 (模板题、FFT)

    luogu P4238 多项式求逆 (模板题.FFT) 手动博客搬家: 本文发表于20181125 13:21:46, 原地址https://blog.csdn.net/suncongbo/artic ...

  8. #3456. 城市规划(生成函数,多项式求逆)

    #3456. 城市规划 设fnf_nfn​为nnn个点的的点的简单无向连通图数目,gng_ngn​为nnn个点的简单无向图个数(不要求联通). 对于gng_ngn​显然有gn=2n(n−1)2g_n ...

  9. [多项式算法]多项式求逆 学习笔记

    多项式求逆 和整数的乘法逆元定义类似,对于多项式\(A(x)B(x)=1\),则称\(A(x),B(x)\)互为乘法逆元. \(A(x)\)存在乘法逆元的充要条件是\([x^0]A(x)\)存在乘法逆 ...

  10. 拓展 欧几里得算法 求逆元_ECC椭圆曲线加密算法:有限域和离散对数

    Hi all,我来翻译第二篇啦.若大家发现那些翻译的不够准确还望指出,不胜感激.首先放上原文链接: http://andrea.corbellini.name/2015/05/23/elliptic- ...

最新文章

  1. 带你玩玩转 MySQL 查询
  2. 到底为什么你我都要了解社会工程学
  3. bootstrap五星评分_星型打分插件 bootstrap-rating-input
  4. java 链表 传递_java 链表 传递过程中的问题
  5. zipkin server 数据持久化问题
  6. python的运算顺序和c一样吗,【Python】Python 对比 C语言的差异
  7. LeetCode 1209. 删除字符串中的所有相邻重复项 II(栈)
  8. python实现关联算法_python使用Apriori算法进行关联性解析
  9. 英特尔 超核芯显卡 620mac_英特尔也玩马甲?有关USB TypeC的冷知识你了解多少
  10. 模版 ----- DP
  11. weblogic 集群配置
  12. Strezov Sampling Trombone Ensemble Mac(长号合奏音色库)
  13. vue 获取安卓原生方法_H5-vue与原生Android、ios交互获取相册图片
  14. JavaScript代码如何在VScode进行调试?
  15. 基于 OpenLayers3 实现的 HTML5 GIS 电信资源管理系统
  16. [转]高品质开源工具Chloe.ORM:支持存储过程与Oracle
  17. 【Vic的小课堂】Unity实现游戏功能(1)—矩形框选
  18. 2016阿里安全工程师实习生招聘笔试题
  19. 理论力学判断自由度的问题
  20. 软件工程第四次作业 石墨文档IOS

热门文章

  1. [译] 或许你并不需要 Rust 和 WASM 来提升 JS 的执行效率 — 第二部分
  2. Android:制作Update.zip升级包 【转】
  3. MongoDB学习(一)Centos6.5下安装mongoDB
  4. 销售订单无法使用折扣(其他可以正常使用)
  5. 创建Maven web工程不能解析EL表达式的解决办法
  6. mysql备份之lvm
  7. c# listView
  8. python vimrc的安装,并用pep8检测python代码
  9. “由俭入奢易,由奢入俭难”,记我的编程语言学习
  10. C/C++程序员面试宝典-2