COGS 2259 異化多肽

2021-08-19 16:56:54 字數 1435 閱讀 6122

qaq…

很明顯我們是可以搞一下指數生成函式的…

然而複雜度是o(

m∗n2

) o(m

∗n2)

無法優化…

換個方式做生成函式

a(x) 表示 質量為 x 的 氨基酸有幾類 b(

x)=∑

∞i=0

a(x)

i b(x

)=∑i

=0∞a

(x)i

顯然答案是b(x)中的n次項係數

上面的式子即為乙個無限等比數列求和

度度的公式s=

a1/(

1−q)

s =a

1/(1

−q

)那麼 b(

x)=∑

∞i=0

a(x)

i=11

−a(x

) b(x

)=∑i

=0∞a

(x)i

=11−

a(x)

很明顯b(x)即為(1-a(x))的逆元

我們做一下多項式求逆就好了…

cogs 2259

#include 

#include

#include

#include

#include

#define int long long

const int maxm=2e6+100,mod=1005060097;

int rev[maxm],bin[1

<<21];

int a[maxm],b[maxm],c[maxm];

inline int fastpow(int

x,int

y)inline void ntt(int

*a,int n,int f)}}

if(f==-1)

}void getinv(int

*a,int

*b,int n)

getinv(a,b,(n+1)>>1);

intm=1;

for(;m

<=n;m

<<=1);

for(int i=0;ifor(int i=n;intt(c,m,1),ntt(b,m,1);

for(int i=0;i*b[i]%mod-c[i]*b[i]%mod

*b[i]%mod+mod)%mod;

ntt(b,m,-1);

for(int i=n;i}signed main()

a[0]=1;

int l;

for(l=1;l<=2

*n;l<<=1);

getinv(a,b,l);

printf("%lld\n",b[n]%mod);

return

0;}

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...