Codeforces 矩阵题 题单
Posted baseai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 矩阵题 题单相关的知识,希望对你有一定的参考价值。
Matrix
CF 166E Tetrahedron
dp方程设为 f[i] 最后在 D点,g[i] 表示最后不在D点。最后 g[] 可以通过矩阵加速数列求得,数据可以强化,复杂度 (O(logn))
CF 1252K Addition Robot
套路题。大家都知道要用线段树,可是不知道怎么去用?那就用我们的好帮手矩阵来解决这个问题。线段树+矩阵
把 x=x+y 和 y = x+y 这两种运算看成在矩阵上的矩阵乘法,两种运算分别对应下面两个矩阵:
egin{bmatrix}
X & Y
end{bmatrix}
egin{bmatrix}
1 & 1
0 & 1
end{bmatrix}
=
egin{bmatrix}
X & X+Y
end{bmatrix}
egin{bmatrix}
X & Y
end{bmatrix}
egin{bmatrix}
1 & 0
1 & 1
end{bmatrix}
=
egin{bmatrix}
X+Y & Y
end{bmatrix}
理解?
这时我们把线段树上的每个点看成‘A’,‘B’所对应的矩阵。区间查询我们只需要把这个区间的矩阵相乘,最后再和 [x,y] 这个原矩阵相乘即可得出答案。
那么修改呢?
考虑到修改一个区间就是把这个区间的‘A’变成‘B’,‘B’变成‘A’。线段树上的一条线段修改一次是一个固定的值,而且再修改一次回来又回到了原来的值(这里的值是矩阵)。一开始我们每个点保留两个矩阵,mul[0]表示自己的矩阵,mul[1]表示翻转后的矩阵,所谓这个区间修改,就是交换 mul[0],mul[1]。(尝试用线段树思维理解一下qwq)至此,我们做出了此题。(然而我还在调程序T_T 呜呜呜)
以上是关于Codeforces 矩阵题 题单的主要内容,如果未能解决你的问题,请参考以下文章
解题报告(十八)Codeforces - 数学题目泛做(难度:2000 ~ 3000 + )
Codeforces Round #587 C. White Sheet(思维+计算几何)
Codeforces Round #257 (Div. 2) B. Jzzhu and Sequences (矩阵快速幂)