• UVA 10294 项链与手镯 (置换)


    Burnside引理:对于一个置换$f$, 若一个着色方案$s$经过置换后不变,称$s$为$f$的不动点。将$f$的不动点数目记为$C(f)$, 则可以证明等价类数目为$C(f)$ 的平均值。

    也就是对于置换群中的某一个置换$f$,$C(f)$为所有着色方案中,那些经过置换$f$ 可以互相转换(即等价)的着色方案数

    因为一个置换可以拆成若干个循环,置换中的每个元素可以看成是一个结点,那么每个节点必有一个出度和入度,所以肯定会形成若干个环,在置换$f$ 的不动点中,被分解成的每个环中,颜色都必须相同(因为通过置换他们可以相互抵达)。如果设一个置换中的循环节数量为$m(f)$,那么$C(f) = k^{m(f)}$ 其中 k 是着色数量。

    UVA 10294 项链与手镯

    传送门

    刘汝佳白书146页

    polya计数裸题

    一共有两种置换,即旋转和翻转,项链只有第一种置换,手镯两种都有。设珠子编号为0~n-1.

    旋转:

    共有n-1种旋转方式的置换,第 i 种即旋转 i 颗珠子的间距,那么可以计算出来从0号珠子出发,要旋转$lcm(i,n) / i$ 次可以转到最初的位置,那么这个循环长度为$frac{gcd(i,n)}$ 。共该置换共有$gcd(i,n)$ 个循环,所以旋转这类置换,共有$a = sum_t{gcd(i,n)}$ 个不动点

    翻转

    当 n 为奇数时(可以想正 n 边形的顶点),有 n 条对称轴,每条对称轴形成了$(n-1)/2$ 个长度为2的,1个长度为1的循环,即(n+1)/2个循环。这些置换的不动点总数为$b=nt^{frac{n+1}{2}}$。

    当 n 为偶数时,有两种对称轴。穿过珠子的对称轴有$frac{2}$ 条, 各形成了$n/2-1$ 个长度为2的循环和两个长度为1的循环;不穿过珠子的对称轴有 (frac{n}{2}), 各形成了$n/2$ 个长度为2的循环。这些置换的不动点总数为$b=frac{2}(t^{n/2+1} + t^{n/2})$

    const int N = 50 + 5;
    
    int n, t;
    ll power[N];
    ll gcd(int a,int b){
        return b == 0 ? a : gcd(b, a % b);
    }
    int main() {
        while(scanf("%d%d",&n,&t) == 2 && n){
            power[0] = 1;
            for (int i = 1; i <= n;i++)
                power[i] = power[i - 1] * t;
            ll a = 0;
            for (int i = 0; i < n;i++)
                a += power[gcd(i, n)];
            ll b = 0;
            if(n % 2 == 1){
                b = n * power[(n + 1) / 2];
            }else
                b = n / 2 * (power[n / 2 + 1] + power[n / 2]);
            cout << a / n << ' ' << (a + b) / 2 / n << endl;
        }
        return 0;
    }
    
  • 相关阅读:
    TP5多条件搜索,同时有必要条件
    微信支付模式二 统一下单一直提示签名错误
    Js选择器总结
    video.js视频播放插件
    chosen 下拉框
    在MySQL中实现Rank高级排名函数
    解决html页面英文和数字不自动换行,但中文就可以自动换行
    php去除html标签
    day29 继承
    day28 作业
  • 原文地址:https://www.cnblogs.com/1625--H/p/12333003.html
Copyright © 2020-2023  润新知