Top Secret (UVa Live Archive Europe Southwestern 2008)

http://livearchive.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2304

問題

円環の中に長さNの数列がある。この数列の各数値に対して自分自身と左側のL倍と右側のR倍を足した数値を新しい数値にするという操作をS回繰り返す。下X桁だけ取り出した最終的な数列を答えよ。
2<=N<=1,000
0<=S<=2^30
0

解法

行列を作ってS乗する。この時、行列は巡回行列になっているので、掛け算をする時に1行目だけ求めて、残りは1行目をずらした物を入れるとO(N^2logS)で計算できる。