TopCoder

Caido
主唱太拼命了

User's AC Ratio

100.0% (2/2)

Submission's AC Ratio

100.0% (3/3)

Tags

Description

給定兩個長度為 N 的非負整數序列 a0,a1,,aN1c0,c1,,cN1 以及一個正整數 K ,定義數列 a 的第 jaj=i=0N1ajN+ici,求 aK

最基礎的作法是透過 DP 在 O(NK) 時間內得到解,再進階一點可以利用矩陣快速冪得到 O(N3logK) 的作法。不過這樣做只會拿到一分。不要緊張,這是一題閱讀測驗題,好好照著題目寫的做就可以拿到分數(吧)。

考慮通靈

考慮把 aKaK1aKN 表示,再把留下來的 aK1 們用 aK2aK1N 表示,會發現過程長的超像多項式的長除法!

(出題者懶得寫算式,請自己拿紙筆用範測一試一下)

正確來說,如果我們計算 xK 除以 B(x)=xNi=0N1cixi 的餘式 R(x),並拿 R(x)x0xN1 項的係數與 a0aN1 一一相乘並加總,就會得到 aK

我們可以對 x 這個多項式做模 B(x) 的快速冪,並用 O(N2) 的時間實作多項式的乘法以及取餘式,那麼我們就可以在 O(N2logK) 的時間內做完快速線性遞迴!這個方法叫做 Kitamasa Method ,是個實作簡短但實用的演算法。

接下來,你可以選擇就這樣拿 20 分走,或繼續往下閱讀(推薦)……

快,還要更快!

早上上過卷積課的你應該要知道,多項式相乘可以在 O(NlogN) 的時間完成,要是也能在 O(NlogN) 時間內完成多項式的除法、取餘就好了!

還真的可以。

逆多項式

A(x) 為一個 N1 次多項式,只要 A(x) 的常數項非 0 ,我們就可以找到 A(x) 在模 xN 底下的逆多項式(有點像模逆元),也就是可以找的到 A1(x) 使得 A(x)A1(x)1(modxN) 。至於要怎麼找呢?繼續考慮通靈。

我們先找到模 x 底下 A(x) 的逆多項式。令它叫 B0

當我們有模 x2k 底下的 A(x) 的逆多項式 Bk 後,我們想求得 Bk+1 ,最後只要取到 2kN 就可以了。要怎麼做這個倍增的過程呢?

我們先令 a=2k,Bk+1=Bk+xaC,ABk=1+xaD 。很顯然的,ABk+1=1+xaD+AxaC ,而根據 Bk+1 的定義, 1+xaD+AxaC1(modx2a)D+AC0(modxa)BkDC(modxa)

Bk 已知, D 可以用一個乘法在 O(aloga) 的時間內算出來,故也可以在 O(aloga) 時間內求出 C 以及 Bk+1 !整體時間複雜度是 O(NlogN) 的。

除法

假設要計算 A(x) 除以 B(x) ,設商 Q(x) 、餘 R(x) ,可以得到 A(x)=B(x)Q(x)+R(x) 。假設 An 次、 Bm 次多項式,且 nm,則可得 Qnm 次的,而 R 至多 m1 次。

考慮把 A,B,Q 全部翻轉,變成 Ar=xnA(x1),Br=xmB(x1),Qr=xnmQ(x1) ,可以發現 ArBrQr(modxnm+1) 成立,把餘數翻到高次項去巧妙的處理掉了!

我們已經會(應該吧)求 Br 在模 xnm+1 底下的逆多項式了,我們就可以在 O(nlogn) 時間求得 Qr ,進一步求得 Q,R

實作時要小心處理一些邊界狀況,例如 R 是 0 多項式,或是倍增的邊界等等。希望大家都能看到這邊並寫出來,真的比理解卷積簡單很多啦 qwq

Input Format

第一行輸入兩個正整數 N,K ,意義如題敘。

接下來兩行分別有 N 個非負整數,代表 a0aN1c0cN1

對於所有測資,保證:

  • 1N20000
  • 1K1018
  • 0ai,ci<998244353:i[0,N)

Output Format

輸出一行包含一個整數,代表 aK998244353 的餘數。

Sample Input 1

2 5
0 1
1 1

Sample Output 1

5

Sample Input 2

3 5
7 1 2
3 3 4

Sample Output 2

650

Hints

多項式操作參考資料:https://cp-algorithms.com/algebra/polynomial.html

想要驗證逆多項式以及多項式除法的正確性可以多多利用 Library Checker Polynomial 分類底下的 Inv of Formal Power Series 以及 Division of Polynomials 喔。

Problem Source

IOICamp 2023 Day3 pF / CodeChef RNG

Subtasks

No. Testdata Range Constraints Score
1 0~1 範例測資 0
2 0~22 N,ai,ci3,K10 0
3 0~46 N300 1
4 0~59 N2000 19
5 0~67 無其他限制 80

Testdata and Limits

No. Time Limit (ms) Memory Limit (VSS, KiB) Output Limit (KiB) Subtasks
0 5000 524288 65536 1 2 3 4 5
1 5000 524288 65536 1 2 3 4 5
2 5000 524288 65536 2 3 4 5
3 5000 524288 65536 2 3 4 5
4 5000 524288 65536 2 3 4 5
5 5000 524288 65536 2 3 4 5
6 5000 524288 65536 2 3 4 5
7 5000 524288 65536 2 3 4 5
8 5000 524288 65536 2 3 4 5
9 5000 524288 65536 2 3 4 5
10 5000 524288 65536 2 3 4 5
11 5000 524288 65536 2 3 4 5
12 5000 524288 65536 2 3 4 5
13 5000 524288 65536 2 3 4 5
14 5000 524288 65536 2 3 4 5
15 5000 524288 65536 2 3 4 5
16 5000 524288 65536 2 3 4 5
17 5000 524288 65536 2 3 4 5
18 5000 524288 65536 2 3 4 5
19 5000 524288 65536 2 3 4 5
20 5000 524288 65536 2 3 4 5
21 5000 524288 65536 2 3 4 5
22 5000 524288 65536 2 3 4 5
23 5000 524288 65536 3 4 5
24 5000 524288 65536 3 4 5
25 5000 524288 65536 3 4 5
26 5000 524288 65536 3 4 5
27 5000 524288 65536 3 4 5
28 5000 524288 65536 3 4 5
29 5000 524288 65536 3 4 5
30 5000 524288 65536 3 4 5
31 5000 524288 65536 3 4 5
32 5000 524288 65536 3 4 5
33 5000 524288 65536 3 4 5
34 5000 524288 65536 3 4 5
35 5000 524288 65536 3 4 5
36 5000 524288 65536 3 4 5
37 5000 524288 65536 3 4 5
38 5000 524288 65536 3 4 5
39 5000 524288 65536 3 4 5
40 5000 524288 65536 3 4 5
41 5000 524288 65536 3 4 5
42 5000 524288 65536 3 4 5
43 5000 524288 65536 3 4 5
44 5000 524288 65536 3 4 5
45 5000 524288 65536 3 4 5
46 5000 524288 65536 3 4 5
47 5000 524288 65536 4 5
48 5000 524288 65536 4 5
49 5000 524288 65536 4 5
50 5000 524288 65536 4 5
51 5000 524288 65536 4 5
52 5000 524288 65536 4 5
53 5000 524288 65536 4 5
54 5000 524288 65536 4 5
55 5000 524288 65536 4 5
56 5000 524288 65536 4 5
57 5000 524288 65536 4 5
58 5000 524288 65536 4 5
59 5000 524288 65536 4 5
60 5000 524288 65536 5
61 5000 524288 65536 5
62 5000 524288 65536 5
63 5000 524288 65536 5
64 5000 524288 65536 5
65 5000 524288 65536 5
66 5000 524288 65536 5
67 5000 524288 65536 5