poj 2409 【polya計數】

哎,最後發一波了,明天就可以滾了嗚嗚嗚~

沒錯,這就是pkusc的那道板子題!
可是不會polya,所以打表過的2333

Burside引理:本質不同的染色方案數等於每種置換不變元素的個數的平均數
polya定理:m染色,方案數 = 1|G|(mg1+mg2+)
gi 爲每種置換的循環節數,|G|爲置換的方案數

題目大意:m染色n個點的環,求方案數(翻轉,旋轉)

(旋轉
易得共有 n 種置換,轉 i 格的循環節長度 n2
(翻轉
1) n 爲奇數
有 n 條對稱軸,每種的循環節數爲 n+12
2) n 爲偶數
1.以兩個點的連線爲對稱軸,有 n2 條對稱軸,每種的循環節數爲 n2+1
2.以相鄰點連線的中垂線爲對稱軸,有 n2 條對稱軸,每種的循環節數爲 n2

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

int n,m,ans;

int gcd(int a,int b)
{
    return b ? gcd(b,a % b) : a;
}

int ksm(int a,int b)
{
    int ret = 1;
    for (;b;b >>= 1,a = a * a)
        if (b & 1) ret *= a;
    return ret;
}

int main()
{
    while (~scanf("%d%d",&m,&n) && n && m)
    {
        ans = 0;
        for (int i = 0;i < n;i ++) ans += ksm(m,gcd(i,n));
        if (n & 1) ans += n * ksm(m,n / 2 + 1);
        else ans += n / 2 * ksm(m,n / 2) + n / 2 * ksm(m,n / 2 + 1);
        ans /= n * 2;
        cout << ans << endl;
    }

    return 0;
}
發佈了110 篇原創文章 · 獲贊 24 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章