[POJ 3150]

Cellular Automaton

矩阵运算。

题意抽象出来,即是求A^k*x(mod m),其中A是n*n的循环矩阵,x是n维列向量。

很直接的思路是O(n^3*lgk),但这里n最大500,TLE的。如果利用A是循环矩阵的性质,那么其实每次只要计算第一行就可以了,其他行都可以由第一行移位得到。这样就可以O(n^2*lgk),实现出来最快500ms。

看评论还有一种O(n*lgn*lgk)的算法……但是想了一早上也没明白怎么弄,饿得不行吃饭先了……