?
?
大致题意:
有n只猫,开始时每只猫有花生0颗,现有一组操作,由下面三个中的k个操作组成:
1. g i 给i只猫一颗花生米
2. e i 让第i只猫吃掉它拥有的所有花生米
3. s i j 将猫i与猫j的拥有的花生米交换
现将上述一组操作循环m次后,问每只猫有多少颗花生?
?
再一次感受到了矩阵的强大。。。循环m次,且m这么大,很容易想到构造转换矩阵,但如何构造是个问题。尤其是第一种操作,第i只猫增加一个花生。具体构造方法是把矩阵扩大为(n+1)*(n+1)的,初始化为单位矩阵,g i: a.mat[0][i] += 1; e i :第i列全置为0; s i j: 第i、j列元素互换
?
这样形成转换矩阵后,循环m次,用矩阵快速幂求得,最后取矩阵第0行的1~n就是答案。
点击打开链接 学习了。。
#include
#include
#include
#include
#include
?
?