COGS2259 異化多肽

2022-02-27 14:04:09 字數 1108 閱讀 1503

傳送門

聽說是多項式求逆的模板題,以後不怕沒地方練多項式求逆啦哈哈……

……我們設使用乙個氨基酸能組成質量為$n$的多肽數量這個數列為$\$,設它的生成函式為$a(x)$,顯然有

\begina(x)=\sum_^\infty \sum_^m[c_j=i]\end

即$a(x)$的$i$次方係數即為相對分子質量為$i$的氨基酸數量。

我們要求的是乙個數列$$,它的第$n$項即為使用任意數目的氨基酸能組成質量為$n$的多肽數量,設它的生成函式為$b(x)$,那麼有

\begina(x)=\sum_^\infty b(x)^i\end

右邊化成封閉形式,得

\begina(x)=\frac 1\end

多項式求逆即可,答案即為$[x^n]a(x)$。順便一提,1005060097的原根是5。

1 #include2 #include3 #include4

using

namespace

std;

5const

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]=,b[maxn];

10int

main()

19 a[0]=(a[0]+1)%p;

20getinv(a,b,n);

21 printf("%d"

,b[n]);

22return0;

23}24void ntt(int *a,int n,int

tp)30

for(int k=2;k<=n;k<<=1)39

}40}41

if(tp<0)45

}46void getinv(int *a,int *c,int

n)59}60

int qpow(int a,int b,int

p)

view code

其實我對ntt和生成函式只是剛入門而已……我們的征途是星辰大海……

2 25 演算法練習

時間限制 1.0s 記憶體限制 512.0mb 十六進製制數是在程式設計時經常要使用到的一種整數的表示方式。它有0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f共16個符號,分別表示十進位制數的0至15。十六進製制的計數方法是滿16進1,所以十進位制數16在十六進製制中是10,而十進位...

藍橋杯 練習(2 25)

時間限制 1.0s 記憶體限制 512.0mb 回形取數就是沿矩陣的邊取數,若當前方向上無數可取或已經取過,則左轉90度。一開始位於矩陣左上角,方向向下。輸入格式 輸入第一行是兩個不超過200的正整數m,n,表示矩陣的行和列。接下來m行每行n個整數,表示這個矩陣。輸出格式 輸出只有一行,共mn個數,...

2 25安卓自學

今天學習tablelayout 如果我們直接往tablelayout中新增元件的話,那麼這個元件將佔滿一行!如果我們想一行上有多個元件的話,就要新增乙個tablerow的容器,把元件都丟到裡面!tablerow中的元件個數就決定了該行有多少列,而列的寬度由該列中最寬的單元格決定 tablerow的l...