COGS2259 异化多肽
传送门
听说是多项式求逆的模板题,以后不怕没地方练多项式求逆啦哈哈……
……
我们设使用一个氨基酸能组成质量为$n$的多肽数量这个数列为$\{a_n\}$,设它的生成函数为$A(x)$,显然有
\begin{align}A(x)=\sum_{i=0}^\infty \sum_{j=0}^m[C_j=i]\end{align}
即$A(x)$的$i$次方系数即为相对分子质量为$i$的氨基酸数量。
我们要求的是一个数列${b_n}$,它的第$n$项即为使用任意数目的氨基酸能组成质量为$n$的多肽数量,设它的生成函数为$B(x)$,那么有
\begin{align}A(x)=\sum_{i=0}^\infty B(x)^i\end{align}
右边化成封闭形式,得
\begin{align}A(x)=\frac 1{1-B(x)}\end{align}
多项式求逆即可,答案即为$[x^n]A(x)$。顺便一提,1005060097的原根是5。
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 const int maxn=262200,p=1005060097,g=5; 6 void NTT(int*,int,int); 7 void getinv(int*,int*,int); 8 int qpow(int,int,int); 9 int n,m,N=1,x,A[maxn]={0},B[maxn]; 10 int main(){ 11 freopen("polypeptide.in","r",stdin); 12 freopen("polypeptide.out","w",stdout); 13 scanf("%d%d",&n,&m); 14 while(N<=n)N<<=1; 15 while(m--){ 16 scanf("%d",&x); 17 A[x]=(A[x]+p-1)%p; 18 } 19 A[0]=(A[0]+1)%p; 20 getinv(A,B,N); 21 printf("%d",B[n]); 22 return 0; 23 } 24 void NTT(int *A,int n,int tp){ 25 for(int i=1,j=0,k;i<n-1;i++){ 26 k=n; 27 do j^=(k>>=1);while(j<k); 28 if(i<j)swap(A[i],A[j]); 29 } 30 for(int k=2;k<=n;k<<=1){ 31 int wn=qpow(g,(tp>0?(p-1)/k:(p-1)/k*(long long)(p-2)%(p-1)),p); 32 for(int i=0;i<n;i+=k){ 33 int w=1; 34 for(int j=0;j<(k>>1);j++,w=(long long)w*wn%p){ 35 int a=A[i+j],b=(long long)w*A[i+j+(k>>1)]%p; 36 A[i+j]=(a+b)%p; 37 A[i+j+(k>>1)]=(a-b+p)%p; 38 } 39 } 40 } 41 if(tp<0){ 42 int inv=qpow(n,p-2,p); 43 for(int i=0;i<n;i++)A[i]=(long long)A[i]*inv%p; 44 } 45 } 46 void getinv(int *A,int *C,int n){ 47 static int B[maxn]; 48 fill(C,C+n,0); 49 C[0]=qpow(A[0],p-2,p); 50 for(int k=2;k<=n;k<<=1){ 51 copy(A,A+k,B); 52 fill(B+k,B+(k<<1),0); 53 NTT(B,k<<1,1); 54 NTT(C,k<<1,1); 55 for(int i=0;i<(k<<1);i++)C[i]=C[i]*((2-((long long)B[i]*C[i]%p)+p)%p)%p; 56 NTT(C,k<<1,-1); 57 fill(C+k,C+(k<<1),0); 58 } 59 } 60 int qpow(int a,int b,int p){ 61 int ans=1; 62 for(;b;b>>=1,a=(long long)a*a%p)if(b&1)ans=(long long)ans*a%p; 63 return ans; 64 }
View Code
其实我对NTT和生成函数只是刚入门而已……我们的征途是星辰大海……
转载于:https://www.cnblogs.com/hzoier/p/6424924.html
COGS2259 异化多肽相关推荐
- 省选模拟赛记录(越往下越新哦~~~)
LOG 模拟赛 第一次见尼玛这么给数据范围的-- 开考有点困,迷迷糊糊看完了三道题,真的是像老吕说的那样,一道都不会-- 思考T1,感觉有点感觉,但是太困了,就先码了暴力,发现打表可以50分,于是就大 ...
- 2022-2028年中国多肽药物市场研究及前瞻分析报告
[报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国多肽药物行业市场行业相关概述.中国多肽药 ...
- Android的API与差异化之路
Android的API与差异化之路 发挥Android特色:框架API和开源(开放) Android平台就如同×××长城般,两岸的硬件业厂商 ...
- 风变编程python网址_风变编程Python:如何打造职场差异化竞争优势
吴军在<浪潮之巅>里指出,21世界最终会是人工智能的世纪,我们要么成为他们的奴隶,要么成为他们的神.每次开学我都会问学生们一个问题:如何才能比别人更优秀?更好的学历?更丰富的工作经验?事实 ...
- 走差异化发展路线思想
走差异化发展路线思想: 伙伴们,我们要做运维人员里PYTHON/PHP开发最好的 做开发人员里 运维水平最好的 做DBA里,开发和运维水平最好的! 走差异化发展的路线,会让我们发展的又快又好! 现在互 ...
- 蛋白对接_【分子对接教程】蛋白/核酸/多肽-小分子对接(DOCK 6.9)
用途 使用UCSF DOCK 6.9程序进行分子对接计算,研究蛋白/核酸/多肽与有机小分子的结合模式与相互作用. 预备知识 分子对接的算法流程 将配体放置在受体口袋中,搜索/调整配体构象,获得可能的结 ...
- iOS端实现React Native差异化增量更新
作为一名iOS原生开发工程师,通过一个礼拜的面试之后发现,原来并不想学的react-native真的是火的一塌糊涂,坐标:杭州,很多公司招聘iOS开发除了原来的OC和Swift,多了一门新语言:rea ...
- 联通电子渠道的差异化思维
电子渠道是为了满足客户实时服务需求而产生的一种自助式新型服务渠道,客户借助终端设备可自助订购产品.查询.办理业务.中国联通的电子渠道包括网上营业厅.手机营业厅.短信营业厅.微信营业厅.自助终端等各类电 ...
- 三星电子网络营销重拳出击芯片制造力求“差异化”取胜智能手机市场
现如今"芯片荒"围绕在一众科企和车企行业之间,作为世界上最大的存储芯片的制造商--三星电子表示自新冠疫情席卷全球,对全球各地经济发展带来不同程度上的下滑停滞,然而一年的时间过去,随 ...
- 前端差异化项目合并打包
前言 以前实现差异化或者说项目上线之前会有一个项目的异化合并打包.这种事情以前一般都是运维或者是后端同事去干,用的一般是 ant 或者是自己写个脚本什么的,在这里我们就不说了[其实是没有玩过].但是这 ...
最新文章
- ue4 函数和宏区别_【UE4】通俗易懂 用蓝图来学习 C++ 基础知识
- 本地连接出来的很慢解决方法
- 一份以太坊入门完全指南(非程序员免进)。
- 【报错笔记】Eclipse导入Maven项目时pom.xml报错,项目上有红感叹号。
- [react] 在React中怎么将参数传递给事件?
- POJ 2431 Expedition (贪心+优先队列)
- VRay渲染器在复仇者联盟:无限战争中应用
- HFSS天线设计笔记-------主极化与交叉极化
- 自媒体赚钱网站有哪些(写文章赚钱的网站大全)
- 重磅!「自然语言处理(NLP)」全球学术界”巨佬“信息大盘点(一)!
- 如何免费将一个PDF拆分成多个文件?
- 基于MATLAB/Simulink的Buck变换器仿真模型,包含开环控制和闭环控制两种控制
- 2020年第十一届蓝桥杯A组省赛
- [转]复合信号、S-Video信号、分量信号
- 计算机加密防止文件外泄,电脑文档加密系统哪个好?文档加密软件如何防止文件流通使用泄密...
- 学习wxWidgets第1篇(续):Codeblocks配置wxWidgets
- 19春福是计算机应用基础,19春福师计算机应用基础在线作业二.doc
- Trino安装部署连接iceberg
- Oracle 12CR2查询转换之星型转换
- 【Nodejs】Too many levels of symbolic links