[AGC003F] Fraction of Fractal

cxqghzj發表於2024-09-13

題意

給定一個由黑白組成的網格。

保證黑子四聯通。

規定一次操作為使用最初的網格圖替換當前網格圖的所有黑色格子。

操作 \(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)\)