Description
有k头小肥猪,你每次要给他们一些饲料,重复n次。
每次给的饲料用m个操作表示:
- 操作1:(1 x)给第x头猪一份饲料;
- 操作2:(2 x y)把第x头猪的饲料给第y头猪(第x头猪就没有饲料了);
- 操作3:(3 x)把第x头猪的饲料加倍;
给你k、m、n和m个操作,回答操作过后每头猪有多少份饲料。
Input
第1行三个数:k、m、n;
第2~m+1行每行一个操作。
Output
1行m个数:操作后每头猪的饲料个数(模10000)。
Sample Input
3 4 3
1 3
1 2
2 3 1
3 2
Sample Output
3 14 0
HINT
【提示】
第一次操作后:1 2 0
第二次操作后:2 6 0
第三次操作后:3 14 0
【数据范围】
对于50%的数据:n≤10^4;
对于100%的数据:k≤10,m≤10,n≤10^10;
题目给出一系列操作,要求我们维护一组数并循环n次,考虑到数据范围,我们很容易想到运用矩阵快速幂维护
因此我们可以构建一个(k+1)*(k+1)大小的矩阵A来存储操作,构建另一个同样大小的矩阵B存储猪的信息,由于操作有三种,我们可以另开三个矩阵表示操作,由于矩阵乘法具有交换律和结合律,每个操作表示的矩阵与A相乘,最后便能得到m次操作后的总状态,幂n-1方后就是最终状态,再用这时的A乘B便可得到操作完成后猪的信息了
如何维护矩阵?假设猪有4头,我们可以得出一下矩阵(i

最低0.47元/天 解锁文章
998

被折叠的 条评论
为什么被折叠?



