題目傳送門
(POJ原地址,如果上不去請看這裏)
還是翻譯:
題目描述 Description
細胞自動機是處在一個特定形狀網格上的一組細胞,這些細胞按照一組基於相鄰細胞的狀態描述新狀態的規則通過一系列離散的時間進化。細胞自動機的順序是它包含的細胞數量。一個順序爲
n 的細胞自動機中的細胞編號爲1 ~n 。
細胞的順序是它可能包含的不同價值數。通常情況下,順序爲m 的細胞的價值爲0 ~m−1 的整數。
細胞自動機的基本特性之一是它進行計算時網格的類型。在這個問題中我們考慮一種特殊形狀的細胞自動機——環狀細胞自動機。這種自動機有n 個細胞,每個細胞有m 種價值。我們把這種細胞自動機表示爲n,m ——自動機。
在n,m ——自動機裏,i 細胞與j 細胞的距離被定義爲min(|i−j|,n−|i−j|) 。一個d ——環境細胞指的是與這個細胞的距離不大於d 的細胞集合。
每d 步之內的細胞價值會被新價值統一取代。在d 步後細胞i 的新價值計算爲屬於這個細胞的d ——環境內所有細胞的價值對m 取模。
下面這張圖片顯示了5,3 ——自動機進行1 步操作。
問題是計算n,m ——自動機進行了k 次d 步操作之後的狀態。
輸入 Input
第一行包含了
4 個整數爲n,m,d,k(1≤n≤500,1≤m≤106,0≤d<n2,1≤k≤107) 。第二行包含n 個從0 到m−1 的整數,表示自動機內細胞的初始價值。
輸出 Output
輸出
n,m ——自動機進行了k 次d 步操作之後的狀態。
還是沒看懂?
有
n 個數圍成一個環,現在有一種變換,將所有距離第i(1≤i≤n) 個數小於等於d 的數加起來,對m 取餘,現在要求將所有的數都變換k 次,得到的n 個數的值。
現在好了吧……
矩陣快速冪是
不過我們發現
那麼我們就可以只計算一行的情況,然後直接推下一行的情況……
然後就可以少一個
這樣就能過了,可是我們觀察那個矩陣,貌似是個卷積形式……
然後推一推FFT,就可以優化到
其實不優化也行……有些時候FFT比
Code