【GDOI 2016模擬3.16】裝飾

題目描述

以以下規則,用紅藍綠三種顏色填充一個2×n 的表格。

  • 相鄰的格子顏色不能相同。有公共邊的格子就被視爲是相鄰的了。
  • 每個2×2 的格子內,每種顏色都至少要出現一次。

答案對109+7 取模

n106


分析

首先這個約束是非常緊的。
考慮將它取反,也就是說求出每一列沒出現的顏色,排成一行,對應的每種顏色ci 的數量變成ncntci
那麼兩行的信息,就可以通過這一列反色的信息,以及兩行開頭一列的排列順序確定下來。

對應的,因爲2×2 方格內不能有缺失,所以反串也不能有連續相同的顏色。

那麼我們先填充開頭的顏色,記它的數量爲x ,於是整個序列就會被劃分成若干段空白,當最後一位被選了,空白段數就是x1 ,否則就是x ,記它爲cnt
其中有一部分是奇數的,一部分是偶數的。
枚舉一下有多少段是奇數的,記爲odd ,那麼偶數段數就可以算出來,是cntodd 。而且選取的方案數也可以通過組合數算出來,也就是(cntodd)

首先剩下兩種顏色的數量不妨記爲y,z ,設y<z ,並且必須要有oddzy
首先z 要在某幾個奇數中比y 多出現一次,先排除掉,然後多餘的odd(zy) 需要兩兩分配,也就是總共要從odd 箇中選出odd(zy)2y 多的,共貢獻(oddodd(zy)2)
那麼剩下的y 就和剩下的z 數量一樣了,都是yodd(zy)2
那麼剩下的yz 必須成對出現,每個段中至少要有一對yz ,而odd 不一定要有,cntodd 一定要有,用擋板問題算出貢獻爲yodd(zy)2+odd1cnt1

最後的最後,因爲偶數段無論是兩者誰開頭都可以,所以還要再乘上一個2cntodd
至此,問題就基本解決了。

時間複雜度O(n)
空間複雜度O(n)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章