1. 程式人生 > >burnside引理+polya計數法小結

burnside引理+polya計數法小結

WC上wwwwodddd講的整數和多項式相關裡面最後又burnside引理的一部分
被生成函式調戲瘋了的我突然斷線重連
坐在禮堂最後一排的沙發位上和老黃人瘋狂口糊
不過聽課的時候想的不是很細,重新整理了一發
這裡寫圖片描述
大概就是

=1i=0cnti

至於polya計數法就是求置換i下不變的方案數,將它理解為:把置換拆成若干個迴圈,每個迴圈顯然要染一樣的顏色,那麼方案數=顏色個數^迴圈個數

bingo,題目走起

Problem1 Path

  • 在一個 n×n 的網格中,從左下角到右上角,每次向上或者向右 走一格,一共需要向右走 n 次,向上走 n 次。輸入 n(1 ≤ n ≤
    10^6),問本質不同的方案有多少種。結果對 p = 10^9 + 9 取模。
    如果兩個方案可以通過對稱和旋轉變成相同的,我們認為他們本質相同。

解法:路徑可以表示成長度為2n的01串,即每一步向上或者向右,對稱即對這個01串翻轉,或者對這個01串按位取反(注意這個是可以寫成置換形式的)。對於種置換分別討論:
1、不翻轉不取反,方案數=C2nn
2、翻轉不取反,如果要不變那麼i和n-i+1位要相同,把01串折半考慮即可,方案數=Cnn2,若01串長度為奇數則為0
3、不翻轉 取反,這怎麼可能相同啊,方案數為0
4、翻轉且取反,同樣折半考慮,第i和第n-i+1位不同,01個數總是相等的,所以任意半個01串翻折取反後都是合法的,方案數為2n
burnside引理,上面四個加起來除以四就行了

Problem2 Ring

  • 一個由 n(2 ≤ n ≤ 10^9) 個珠子組成的環,我們要將所有珠子染 成 c(1 ≤ c ≤ 10^9)
    種顏色之一。問存在多少種本質不同的方案, 結果對 10^9 + 7 取模。 當兩種方案通過旋轉後變得相同時,我們認為他們本質相同。
    但是不能翻轉。

觀察置換,會發現移動p1位的置換存在ngcd(p,n)個迴圈節,根據burnside引理,ans=1ni=1ncngcd(p,n),把它寫成尤拉函式的形式ans=1nd|nϕ(nd)c(nd),列舉約數的時間代價就能求出來。

Problem3 Ring

  • 一個由 n(2 ≤ n ≤ 109) 個珠子組成的環,我們要將所有珠子染 成 黑白兩種顏色。但是黑色不能相鄰,問有多少種本質不同的
    方案,結果對 109 + 7 取模。 當兩種方案通過旋轉後變得相同時,我們認為他們本質相同。 但是不能翻轉。

ans=1nd|nϕ(nd)fd(nd)
推公式的方法與Problem2同理
其中fd為長度為d的合法方案數,計算方法為f1=1f2=3fn=fn1+fn2
講題的時候和老黃人已經想出來解法,但是不會證,滿心期待地準備聽證明結果講踢人略過去。回來之後大概想了一下,大概是如果要放一個白色的球,那麼方案數為fn1,若放一個黑色的球,上一個結尾如果是黑色球的話那麼我們這次放白球+黑球,上一個結尾如果是白色球的話我們這次放黑球+白球,方案數為fn2,得到轉移fn=fn1+fn2

Problem4 Face

  • 一個由 n×m 的矩形,我們要用他非常正常地密鋪整個平面, 我們要將所有格子染成 c 種顏色。問有多少種本質不同的方案, 結果對 10^9+7 取模。 當兩種方案看起來一樣時,即矩形通過迴圈平移時一樣,我們認 為他們本質相同。 1 ≤ n ≤ 109,1 ≤ m ≤ 109,1 ≤ c ≤ 10^9

嗯這是一個矩陣,所以它的置換也是一個矩陣,這個矩陣也是可以找迴圈節的,兩維分別位移a和b個單位的時候,矩陣的迴圈節為