题目链接:http://poj.org/problem?id=2409

题意:

  有一串n个珠子穿起来的项链,你有k种颜色来给每一个珠子染色。

  问你染色后有多少种不同的项链。

  注:“不同”的概念是指无论怎样旋转或翻转项链,都与之前的不同。

题解:

  本题用到了置换的相关知识:

    (1)Burnside引理:

      等价类数目 = 所有C(f)的平均值 (C(f)为置换f的不动点数目)

    

    (2)置换f可以分解成m(f)个循环的乘积,假设涂k种颜色:

      C(f) = k^m(f)

    

    (3)Polya定理:(综上)

      等价类数目 = 所有k^m(f)的平均数

  考虑两种操作,旋转和翻转:

    (1)旋转:

      先假定所有的旋转都是顺时针(逆时针也一样)。

      那么对于旋转这个操作,总共有n个置换:

        不旋转(旋转0格)、顺时针旋转1格(1个珠子的距离)、2格、3格...n-1格。

      所以现在要算的就是每个置换f的m(f),然后使用Polya定理。

      旋转i格:m(f) = gcd(n,i)

      所以sum += ∑( k^gcd(n,i) ) (0<=i<=n-1)

    (2)翻转:

      有两种情况,n为奇数或偶数。

        1.偶数:

          共有n个对称轴,也就是有n个置换。

          I. 其中,n/2个对称轴不穿过珠子。这种置换的m(f) = n/2 。

            所以sum += (n/2) * (k^(n/2))

          II.另外n/2的对称轴恰好经过2颗珠子。这种置换的m(f) = n/2 - 1 。

            所以sum += (n/2) * (k^(n/2-1))

          综上:sum += (n/2) * ( k^(n/2) + k^(n/2-1) )

        

        2.奇数:

          共有n个对称轴,也就是有n个置换。并且每个对称轴恰好经过一颗珠子。

          所有置换的m(f) = (n-1)/2

          所以sum += n * ( k^((n-1)/2) )

  

  呼。。。两种操作讨论完了。

  因为两种操作总共有2*n个置换。

  所以呢。。。

  答案是:sum/(2*n)  ヾ(๑╹◡╹)ノ"

AC Code:

 // num of equivalence class = average C(f)
// C(f) = k ^ m(f) -> num of fixed points
// m(f) = circle num in each permutation #include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 40 using namespace std; int n,t;
int POW[MAX_N]; int gcd(int a,int b)
{
return b==?a:gcd(b,a%b);
} int main()
{
while(cin>>t>>n)
{
if(n== && t==) break;
POW[]=;
for(int i=;i<=n;i++)
{
POW[i]=POW[i-]*t;
}
int sum=;
// rotate
for(int i=;i<n;i++)
{
sum+=POW[gcd(n,i)];
}
// overturn
if(n&) sum+=n*POW[(n+)/];
else sum+=(n/)*(POW[n/+]+POW[n/]);
cout<<sum/(*n)<<endl;
}
}

POJ 2409 Let it Bead:置换群 Polya定理的更多相关文章

  1. poj 1286 Necklace of Beads &amp; poj 2409 Let it Bead(初涉polya定理)

    http://poj.org/problem?id=1286 题意:有红.绿.蓝三种颜色的n个珠子.要把它们构成一个项链,问有多少种不同的方法.旋转和翻转后同样的属于同一种方法. polya计数. 搜 ...

  2. POJ 2409 Let it Bead(Polya定理)

    点我看题目 题意 :给你c种颜色的n个珠子,问你可以组成多少种形式. 思路 :polya定理的应用,与1286差不多一样,代码一改就可以交....POJ 1286题解 #include <std ...

  3. poj 2409 Let it Bead【polya定理+burnside引理】

    两种置换 旋转:有n种,分别是旋转1个2个--n个,旋转i的循环节数位gcd(i,n) 翻转:分奇偶,对于奇数个,只有一个珠子对一条边的中点,循环节数为n/2+1:对于偶数个,有珠子对珠子和边对边,循 ...

  4. POJ 2409 Let it Bead【Polya定理】(模板题)

    <题目链接> 题目大意:用k种颜色对n个珠子构成的环上色,旋转.翻转后相同的只算一种,求不等价的着色方案数. 解题分析: 对于这种等价计数问题,可以用polay定理来解决,本题是一道pol ...

  5. POJ 2409 Let it Bead [置换群 Polya]

    传送门 题意:$m$种颜色$n$颗珠子,定义旋转和翻转两种置换,求不等价着色数 暴力求每个置换的循环节也许会$T?$ 我们可以发现一些规律: 翻转: $n$为奇数时每个置换有$1+\frac{n-1} ...

  6. POJ 2409 Let it Bead(polya裸题)

    题目传送:http://poj.org/problem?id=2409 Description "Let it Bead" company is located upstairs ...

  7. bzoj 1004 Cards & poj 2409 Let it Bead —— 置换群

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1004 关于置换群:https://www.cnblogs.com/nietzsche-oie ...

  8. bzoj 1004 [HNOI2008]Cards && poj 2409 Let it Bead ——置换群

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1004 http://poj.org/problem?id=2409 学习材料:https:/ ...

  9. poj2409:Let it Bead(置换群 polya定理)

    题目大意:长度为n的项链,要染m种颜色,可以通过旋转或翻转到达的状态视为同一种,问有多少种染色方案. 学了一波polya定理,发现很好理解啊,其实就是burnside定理的扩展. burnside定理 ...

  10. POJ 2409 Let it Bead(Polya简单应用)

    Let it Bead 大意:给你m种颜色,n个珠子串起来.旋转跟反转同样算同样,问有多少种不同的涂色组合方式. 思路:Polya的简单应用. /*************************** ...

随机推荐

  1. 跟着实例学习设计模式(9)-桥接模式bridge(结构型)

    桥接模式属于结构型设计模式. 设计意图:将抽象部分与实现部分分离.使它们都能够独立的变化. 一看到设计意图,大家可能有些发懵,我们看到的继承和接口不都是抽象和实现分离的吗?尤其是接口和抽象类都是这种实 ...

  2. [转载]使用RoboCopy 命令

    经常进行文件管理操作的朋友们,不满意于Windows系统内置的复制功能,因为它太龟速了.于是大家就使用FastCopy.TeraCopy之类的软件来加速复制,但是你是否知道Windows 7已经内置快 ...

  3. Action window Flags

    Action window 主要字段使用 含义     target 值 作用 current 当前窗口 new 新窗口 inline 内联编辑 fullscreen 全屏 main 当前窗口的主动作 ...

  4. 【Python】导入类

    导入单个类 随着不断添加类,可能会使文件变得很长,那么此时,需要将类存储在模块中,然后在主程序导入类即可 book.py class Book(): '''模拟一本书''' def __init__( ...

  5. javascript 数组Array排序

    var numberAry = [9,9,10,8,7,80,33,55,22]; numberAry.sort(); /*输出:10,22,33,55,7,8,80,9,9 上面的代码没有按照数值的 ...

  6. SpringMVC:前台jsp页面和后台传值

    前台jsp页面和后台传值的几种方式: 不用SpringMVC自带的标签 前台---->后台,通过表单传递数据(): 1.jsp页面代码如下,  modelattribute 有没有都行 < ...

  7. C#按指定长度分割字符串

    C#按指定长度分割字符串   这几天学习分析声音的波形数据,接收到的是十六进制的数据,需要将数据转换成十进制再绘图,这个过程涉及到字符串的分割,正好可以促进自己对C#相关知识的学习.说到分割字符串,我 ...

  8. rtems 4.11 IRQ (arm,beagle)

    arm IRQ入口在 cpukit/score/arm/arm_exec_interrupt.S 中,其中BSP最关心就是 bl bsp_interrupt_dispatch 这句,看看beagle ...

  9. 精彩回顾 HUAWEI HiAI 亮相华为北研所

    ​​从普通照片变成艺术品,仅需3秒: 从随手拍下的讲解胶片到生成规整清晰的ppt,只要瞬间…… 5月25日在华为北京研究所举办的HUAWEI HiAI技术合作交流会上,伴随着一声声惊叹,数款接入HUA ...

  10. CentOS 6.9上安装Mysql 5.7.18 安装

    CentOS 6.9上安装Mysql 5.7.18 安装 下载地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.18-linux-g ...