原题链接:
poj
题意简述
给定一个长度为 n ( < = 100 ) n(<=100) n(<=100)的序列,和一组操作。一组操作由 k ( < = 100 ) k(<=100) k(<=100)个操作组成,有三种,分别是:
- 交换两个数
- 某个单独位置++
- 某个单独位置=0
重复 m ( < = 1 e 9 ) m(<=1e9) m(<=1e9)次。求最后的序列。
思路
我们发现,要重复很多次,但是长度和一组的数量都不大,而且是立方的复杂度。
立方?!想到了什么!
yeah♂,蒟 矩阵。配一张奆佬的图
(原链接,这篇讲的很好)
也就是说,我们构造一个转移矩阵 T T T,一开始是一个单位矩阵(对角线是 1 1 1的矩阵)
对于:
- 交换 ( a , b ) (a,b) (a,b):交换 T T T的第 a , b a,b a,b两行( O ( n ) O(n) O(n))
- 点 a a a++: T T T第 a a a行第 n + 1 n+1 n+1个位置++
- 点 a a