题目链接: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. VC6 在使用VC助手(Visual AssistX)在Win7下不能使用↑↓←→及回车键选择的解决的方法

    VC6使用Visual AssistX版本号的问题,换一个版本号.如"Visual Assist X 10.8.2029"就可以解决. http://pan.baidu.com/w ...

  2. 查看本机外网ip地址

    DOS下是无法查看外网IP的,只能获取本机内网IP地址   外网IP只能通过专门的测IP网站 http://www.ip138.com/ip2city.asp

  3. java中的值传递和引用传递区别

    值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响 ...

  4. ES 30 - Elasticsearch生产集群的配置建议

    目录 1 服务器的内存 2 服务器的CPU 3 服务器的磁盘 4 集群的网络 5 集群的节点个数 6 JVM的参数设置 7 集群的数据量 8 总结 在生产环境中, 要保证服务在各种极限情况下的稳定和高 ...

  5. 1-1:CSS3课程入门之属性选择器

    div[name=jewave] 选取属性名为name且属性值是"jewave"的元素 div[name^=jewave]选取属性名为name且属性值以"jewave&q ...

  6. 图像检测之sift and surf---sift中的DOG图 surf hessian

    http://www.cnblogs.com/tornadomeet/archive/2012/08/17/2644903.html http://www.cnblogs.com/slysky/arc ...

  7. POJ 1840 Eqs(hash)

    题意  输入a1,a2,a3,a4,a5  求有多少种不同的x1,x2,x3,x4,x5序列使得等式成立   a,x取值在-50到50之间 直接暴力的话肯定会超时的   100的五次方  10e了都 ...

  8. WPF的ListView控件自定义布局用法实例

    正文: 如何布局是在App.xaml中定义源码如下 <Application x:Class="CWebsSynAssistant.App"   xmlns="ht ...

  9. Tiny语言编译器简单介绍

    1.简单介绍:编译器是将一种语言翻译成还有一种语言的程序.编译器将源程序的代码作为输出,从而产生用目标语言编写的等价程序.比如源码为C/C++等高级语言,那么目标语言就是目标机器的机器代码.也就是能够 ...

  10. 【BZOJ3065】带插入区间K小值 替罪羊树+权值线段树

    [BZOJ3065]带插入区间K小值 Description 从前有n只跳蚤排成一行做早操,每只跳蚤都有自己的一个弹跳力a[i].跳蚤国王看着这些跳蚤国欣欣向荣的情景,感到非常高兴.这时跳蚤国王决定理 ...