傳送門
聽說是多項式求逆的模板題,以後不怕沒地方練多項式求逆啦哈哈……
……我們設使用乙個氨基酸能組成質量為$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 #include4view codeusing
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)
其實我對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...