1. 程式人生 > >poj 2888 Magic Bracelet

poj 2888 Magic Bracelet

blog 不同 problem pro org 啟示 image nbsp 相同

http://poj.org/problem?id=2888

POJ2888——Pólya思想+數論+動規+矩陣快速冪(經典)

置換問題的關鍵在於降低枚舉置換的復雜度和找不動點的復雜度。

和基礎的置換不同在於每個環內部不能無腦填相同的顏色了。

但是枚舉環還是基本思路一定是要枚舉的。

考慮降低枚舉置換的復雜度:

環只和gcd有關,枚舉gcd一起統計。

技術分享圖片

把上面的換成下面的。枚舉gcd

由於根號的分解不是滿的,所以復雜度會降低。

對於每個置換的不動點個數:
即每隔i個都相等。

所以直接分成i條,然後矩陣快速冪優化dp即可。

轉移矩陣的i次冪算出來,

再枚舉第一個填j顏色,對應乘起來就是整個第j行的值,選擇不會和最後一個沖突的值加起來即可。

O(10^3logn*sqrt(n))

可以過。

啟示我們,不動點的個數不一定要按照環來統計

也可以每i個看成一個段來統計

置換相同的一起枚舉。考慮環,不動點在條件下進行計算。

poj 2888 Magic Bracelet