luoguP5591 小豬佩奇學數學

2022-04-08 08:05:42 字數 4086 閱讀 3459

由於存在一道題叫做白兔之舞就導致這道題看上去非常的板\(......(\)如果按照這個方法推下來

約定,\([x]\)表示\(x\)向下取整

\[\sum_^n\dbinom\times p^i\times [\dfrac]

\]然後會想到可以將\([\dfrac]\)拆開變成:

\[\dfrac

\]於是原問題變成:

\[\sum_^n\dbinom\times p^i\times\dfrac

\]看到了\(i\%k\),然後還有組合數,然後\(k\)還是\(2\)的整數次冪,這個時候當然是單位根反演上場了...

\[\sum_^\sum_^n[i\%k==t]\dbinom\times \dfrac\times p^i

\]然後就是喜聞樂見的化式子了

\[\sum_^\sum_^n[(i-t)\%k==0]\dbinom\times \dfracp^i

\]\[\sum_^\sum_^n\dfrac\sum_^\omega_^ \times\dbinom \times\dfracp^i

\]\[\dfrac\sum_^\sum_^n\sum_^\omega_^ \times\dbinom\times(i-t)p^i

\]\[\dfrac\sum_^\sum_^n\sum_^\omega_^\times\omega_^ \times\dbinom\times(i-t)p^i

\]然後肯定要交換求和順序變成:

\[\dfrac\sum_^\sum_^\omega_^\sum_^\omega_^ \times \dbinom\times (i-t)p^i

\]然後這裡是可以將其拆開的...

\[\dfrac\sum_^\sum_^\omega_^\sum_^\omega_^ \times \dbinom\times i\times p^i-\dfrac\sum_^\sum_^\omega_^\sum_^\omega_^ \times \dbinom*tp^i

\]我們先忽略\(\dfrac\)

\[\sum_^\sum_^\omega_^\sum_^\omega_^ \times \dbinom\times i\times p^i-\sum_^t\times \sum_^\omega_^\sum_^\omega_^ \times \dbinomp^i

\]\[\sum_^\sum_^\omega_^\sum_^(\omega_^p)^i \times \dbinom\times i-\sum_^t\times \sum_^\omega_^\sum_^(\omega_^p)^i \times \dbinom

\]第二個式子很好處理,我們直接用二項式定理即可化開變成:

\[\sum_^t\times \sum_^\omega_^(\omega_^p+1)^n

\]然後對於某乙個\(j\),\((\omega_^p+1)^n\)為定值,設其為\(a_j\)

第乙個式子可以將組合數拆開

\[\sum_^\sum_^\omega_^\sum_^(\omega_^p)^i \times \dbinom\times i

\]\[\sum_^\sum_^\omega_^\sum_^(\omega_^p)^i \times \dfrac\times i

\]然後這個時候可以將\(i=0\)的那一項給忽略掉

\[\sum_^\sum_^\omega_^\sum_^(\omega_^p)^i \times \dfrac

\]\[\sum_^\sum_^\omega_^\sum_^(\omega_^p)^i \times \dfrac

\]\[n*\sum_^\sum_^\omega_^\sum_^(\omega_^p)^\times \dfrac

\]\[n*\sum_^\sum_^\omega_^\sum_^(\omega_^p)^*\omega_^jp\times \dfrac

\]\[n*\sum_^\sum_^\omega_^\times \omega_^jp\sum_^(\omega_^p)^\times \dfrac

\]\[n*\sum_^\sum_^\omega_^\times \omega_^jp\sum_^(\omega_^p)^\times \dbinom

\]\[n*\sum_^\sum_^\omega_^\times \omega_^jp\sum_^(\omega_^p)^\times \dbinom

\]\[n*\sum_^\sum_^\omega_^\times \omega_^jp*(\omega_^p+1)^

\]後面那一坨對於某乙個\(j\)也是固定的,我們可以設\(b_j=\omega_^jp*(\omega_^jp+1)^\)

那麼就有原式即:

\[n*\sum_^\sum_^\omega_^\times b_j-\sum_^t*\sum_^\omega_^a_j

\]然後我們就得到了乙個\(o(k^2)\)的做法了...

然後我們用一下白兔之舞的神仙操作\(tj=\dfrac-\dfrac-\dfrac\)

證明也很簡單,分子是:

\[(t+j)^2-t-j-j^2+j-t^2+t

\]\[2tj

\]所以原式就可以化成:

下面的組合數都反了,但我懶得改了qaq

\[n*\sum_^\sum_^\omega_^-\binom-\binom)}\times b_j-\sum_^t*\sum_^\omega_^-\binom-\binom)}a_j

\]\[n*\sum_^\sum_^\omega_^+\binom+\binom}\times b_j-\sum_^t\times \sum_^\omega_^+\binom+\binom}a_j

\]\[n*\sum_^\sum_^\omega_^} \omega_^}\omega_k^}*b_j-\sum_^\sum_^\omega_^} t\times \omega_^}\omega_k^}a_j

\]然後如果我們將\(t+k\)看作乙個整體那麼就會發現這是乙個卷積的形式

然後就只需要將\(\omega_^}\)和\(\omega_k^}\times b_j\)以及\(t\times \omega_^}\)和\(\omega_k^}\times a_j\)分別卷起來即可,暴力卷是需要\(\rm 6ntt\)的...

還擔心會\(\rm t\)來著...然而事實上也不慢,開\(\rm o2\)最慢的點才\(1.3s\)..不過其實可以做\(\rm 3fft\)的...因為卷起來可以將結果乘起來再加起來...同時把兩個多項式的\(\rm dft\)算出來需要\(3\)次變\(2\)次的技巧...所以速度應該會還可以

複雜度\(o(k\log k)\)

\(code:\)

#includeusing namespace std ;

#define rep( i, s, t ) for( register int i = s; i <= t; ++ i )

#define re register

#define ll long long

#define int long long

int gi()

while( cc >= '0' && cc <= '9' ) cn = cn * 10 + cc - '0', cc = getchar() ;

return cn * flus ;

}const int gi = 332748118 ;

const int p = 998244353 ;

const int n = 4e6 + 5 ;

const int g = 3 ;

int n, p, m, limit, l, r[n] ;

ll a[n], b[n], f[n], f2[n], dg[n], inv ;

ll fpow( ll x, int k )

return ans % p ;

}void ntt( ll *a, int type )

} if( type != 1 ) rep( i, 0, limit - 1 ) a[i] = ( a[i] * inv ) % p ;

}void init()

ll c( int x )

signed main()

因為多項式實在是做少了所以調得非常自閉...,下次再寫我開陣列絕對不這麼吝嗇qaq我錯了

題解 P5591 小豬佩奇學數學

sum n tbinomp i lfloor frac ik rfloor pmod 1 leq n,p 998244353,k in 0 leq w leq 20 首先知道乙個結論 n k sum omega n 下面將用這個柿子亂搞。sum n tbinomp i lfloor frac ik ...

Python 畫小豬佩奇

我們將用python 畫出當下最時尚的小豬佩奇!直接上 from turtle import def nose x,y 鼻子 penup 提起筆 goto x,y 定位 pendown 落筆,開始畫 setheading 30 將烏龜的方向設定為to angle 為數字 0 東 90 北 180 西...

python畫小豬佩奇

coding utf 8 import turtle as t t.pensize 4 設定畫筆的大小 t.colormode 255 設定gbk顏色範圍為0 255 t.color 255,155,192 pink 設定畫筆顏色和填充顏色 pink t.setup 840,500 設定主視窗的大小...