圓盤自動機 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個小寫字母組成的字符集,第...