1. 程式人生 > 其它 >【題解】AGC003F Fraction of Fractal

【題解】AGC003F Fraction of Fractal

連通塊不好統計,常見的套路是討論點數和邊數,但是有環的存在似乎並不是很好辦。

注意到黑點四聯通,討論一下:

  • 如果上下不連通,左右也不連通,那麼答案為 \((hw)^{k-1}\)
  • 如果上下聯通且左右聯通,那麼答案為 \(1\)
  • 剩下的情況只有上下或左右聯通。

那麼注意到,如果將整個圖縮成一個點,那麼原問題答案就是:在 \(k-1\) 級分形中的連通塊個數(只考慮上下 / 左右的情況下)。不難發現僅考慮上下 / 左右時,連通塊應該是形如鏈的,也就是說此時點數和邊數的差恰好為 \(1\),這樣只需要將邊數算出來就大功告成了。

由於上下 / 左右是等價的,這裡只討論“上下“的做法。

邊有兩種:圖形之間的邊,舊圖形內部的邊。記 \(f_i\)

表示 \(i\) 級分形的邊數,接下來需要記錄:黑點數、上下同為 \(1\) 的位置數、上下相鄰位置為 \(1\) 的個數。分別為 \(h,g_i,f_1\),可以得到轉移式:\(f_i=f_{i-1}h+f_1g_{i-1}\)\(g_i=g_1g_{i-1}\),矩陣快速冪。

程式碼:Submission #26329818 - AtCoder Grand Contest 003