[AGC003F] Fraction of Fractal

题意

给定一个由黑白组成的网格。

保证黑子四联通。

规定一次操作为使用最初的网格图替换当前网格图的所有黑色格子。

操作 \(k\) 次。

问最终有多少个黑色连通块,对 \(10 ^ 9 + 7\) 取模。

\(k \le 10 ^ {18}\)

Sol

先不难注意到这个东西只和原网格图是否左右联通和上下联通有关。

注意到若左右上下都联通,那么最终只有一个连通块,若都不联通,那么最终的连通块数为 \(cnt ^ {k - 1}\)

考虑只有左右或者只有上下联通的情况。

不难想到那个很 \(trivial\) 的结论,即 连通块数 = 点数 - 边数。

考虑进行的最后一次替换操作,那么显然 连通块数 即为 点数 减去 图中左右黑色点相邻的对数。

设点数为 \(a\),黑色点相邻对数为 \(b\),最初的图的黑色点相邻对数为 \(c\),最初的图的左右联通相邻对数为 \(d\)

不难发现:\(b' = a \times c + b \times d\)

不妨构造矩阵:

\[\begin{pmatrix} a & b \end{pmatrix} \times \begin{pmatrix} c \cr d \end{pmatrix} \]

注意到因为每次都是乘一个原始矩阵,因此 \(b\)\(c\) 直接合并不管就行了。

因此答案为:

\[\begin{pmatrix} a & b \cr 0 & d \end{pmatrix} ^ {k - 1} \]

复杂度 \(O(\log k)\)

posted @ 2024-09-13 22:31  cxqghzj  阅读(4)  评论(0编辑  收藏  举报