圓盤自動機 cell

2021-09-13 14:53:42 字數 1369 閱讀 4652

圓盤自動機 cell

乙個n-m圓盤自動機,包含n個排列成一圈的方格,它們按1至n編號。每個方格中有乙個整數,範圍[0,m-1] 。圓盤會進行d操作,每次d操作會使得每個方格中的數同時變換,變換為與其位置差不超過d的所有圓盤中數的和模m的結果(注意圓盤排成一圈首尾相連)。

乙個5-3自動機進行一次1操作後的狀態如下:

給定乙個n-m自動機的初始狀態,以及n,m,d,k。問這個自動機進行k次d操作之後的狀態。

輸入格式

第一行包含n,m,d,k . 第二行包含n個整數,範圍[0,m-1]

輸出格式

一行n個整數,為所求的操作後狀態。

樣例樣例輸入

5 3 1 1

1 2 2 1 2

樣例輸出

2 2 2 2 1
資料範圍與提示

【樣例輸入二】

5 3 1 10

1 2 2 1 2

【樣例輸出二】

2 0 0 2 2

【資料範圍】

對於30%的資料,n<=100,d<=100,k<=100 ;

對於60%的資料,n<=100 ;

對於100%的資料,1<=n<=500,1<=m<=1 000 000,0<=d<=n/2,1<=k<=10 000 000 。

solution

k是10^9,考慮矩陣乘法。

n是500,似乎會t。

有個高階的東西叫迴圈矩陣。

我們只記錄第一行。

考慮c=a*b

c[1]=a[1][1]*b[1][1]+a[1][2]*b[2][1]+a[1][3]*b[3][1]+a[1][4]*b[4][1]

=a[1]*b[1]+a[2]*b[4]+a[3]*b[3]+a[4]*b[2]

c[2]=a[1][1]*b[1][2]+a[1][2]*b[2][2]+a[1][3]*b[3][2]+a[1][4]*b[4][2]

=a[1]*b[2]+a[2]*b[1]+a[3]*b[4]+a[4]*b[3]

c[(i+j-2)%n+1]=a[i]*b[j]

node operator *(node ax,node bx)

returnc;}

//o(n^2)

還有乙個性質:迴圈矩陣相乘還是迴圈矩陣。

這樣就n^2解決了

posted @

2019-03-24 13:33

liankewei123456 閱讀(

...)

編輯收藏

AC自動機及字尾自動機

ac自動機是一種基於trie樹的演算法,其本質和kmp上的處理很相似。trie樹結構 kmp轉移思路 ac自動機組要由三個部分組成 trie樹的建立 fail指標的匹配 對ac自動機的詢問 每次建立自動機會有一次初始化 ac自動機類 struct node node結構體 struct ac voi...

字尾自動機 序列自動機綜合

好像序列自動機還沒有寫過 串長為n的串共有n 1個節點,除了串中的n個節點,還有乙個空的根節點放在串首。每個節點至多有26條出邊,每條邊連向它之後的第乙個字元。串中的任意乙個子串行對應了一條根到某個節點的路徑。且每條路徑對應乙個不同的子串行。每個節點的parent是這個字母上一次出現的位置。更新只要...

有窮自動機

problem description adfa 證明 adfa是可判定的。實驗方法 編寫乙個演算法 程式,對於任意給定的輸入,可以判定adfa。input 有多個測試序列,測試結束於測試檔案結束 每個測試序列的第一行為幾個正整數n m t a分別表示有n個狀態,從a開始m個小寫字母組成的字符集,第...