POJ 2409 Let it Bead:置换群 Polya定理
题目链接: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定理的更多相关文章
- poj 1286 Necklace of Beads & poj 2409 Let it Bead(初涉polya定理)
http://poj.org/problem?id=1286 题意:有红.绿.蓝三种颜色的n个珠子.要把它们构成一个项链,问有多少种不同的方法.旋转和翻转后同样的属于同一种方法. polya计数. 搜 ...
- POJ 2409 Let it Bead(Polya定理)
点我看题目 题意 :给你c种颜色的n个珠子,问你可以组成多少种形式. 思路 :polya定理的应用,与1286差不多一样,代码一改就可以交....POJ 1286题解 #include <std ...
- poj 2409 Let it Bead【polya定理+burnside引理】
两种置换 旋转:有n种,分别是旋转1个2个--n个,旋转i的循环节数位gcd(i,n) 翻转:分奇偶,对于奇数个,只有一个珠子对一条边的中点,循环节数为n/2+1:对于偶数个,有珠子对珠子和边对边,循 ...
- POJ 2409 Let it Bead【Polya定理】(模板题)
<题目链接> 题目大意:用k种颜色对n个珠子构成的环上色,旋转.翻转后相同的只算一种,求不等价的着色方案数. 解题分析: 对于这种等价计数问题,可以用polay定理来解决,本题是一道pol ...
- POJ 2409 Let it Bead [置换群 Polya]
传送门 题意:$m$种颜色$n$颗珠子,定义旋转和翻转两种置换,求不等价着色数 暴力求每个置换的循环节也许会$T?$ 我们可以发现一些规律: 翻转: $n$为奇数时每个置换有$1+\frac{n-1} ...
- POJ 2409 Let it Bead(polya裸题)
题目传送:http://poj.org/problem?id=2409 Description "Let it Bead" company is located upstairs ...
- bzoj 1004 Cards & poj 2409 Let it Bead —— 置换群
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1004 关于置换群:https://www.cnblogs.com/nietzsche-oie ...
- 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:/ ...
- poj2409:Let it Bead(置换群 polya定理)
题目大意:长度为n的项链,要染m种颜色,可以通过旋转或翻转到达的状态视为同一种,问有多少种染色方案. 学了一波polya定理,发现很好理解啊,其实就是burnside定理的扩展. burnside定理 ...
- POJ 2409 Let it Bead(Polya简单应用)
Let it Bead 大意:给你m种颜色,n个珠子串起来.旋转跟反转同样算同样,问有多少种不同的涂色组合方式. 思路:Polya的简单应用. /*************************** ...
随机推荐
- jquery插件jTemplates使用方法
简单记一下我所做项目中用到的代码,以备以后用的时候一看明确了. 1.jsp(jquery-jtemplates.js下载地址:http://download.csdn.net/detail/xlb74 ...
- Mysql processlist命令
Mysql processlist命令 mysqladmin -uroot -proot processlist mysql 查看当前连接数 命令: show processlist; 如果是ro ...
- 解决apt 依赖破损的问题
在 安装 python3 / python2 共存的环境时, 不知道做了什么, 导致 apt 依赖故障 odoo@sy-odoo-08:~$ sudo apt-get remove apport 正在 ...
- binary-tree-inorder-traversal——二叉树中序遍历
Given a binary tree, return the inordertraversal of its nodes' values. For example:Given binary tree ...
- Matlab 绘图全方位分析及源码
Matlab绘图 强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数.此外,M ...
- Oracle:复合触发器
----- CF_DEPTUCORGANIZATION INSERT UPDATE DELETE 触发器CREATE OR REPLACE TRIGGER tr_del_CF_DEPTUCORGA ...
- C#中图片.BYTE[]和base64string的转换
在C#中 图片到byte[]再到base64string的转换: Bitmap bmp = new Bitmap(filepath); MemoryStream ms = ...
- Java泛型【转】
一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: public class GenericTest { public static void main(String[] a ...
- 初学shell,为了练习sed,写了个简单的批量修改文件名的脚本,后来执行时发现系统竟然自带有一个rename命令,顺便也记下了
1 #!/bin/bash 2 <<Comment 3 批量修改文件名的脚本 4 2015/10/24 5 webber 6 Comment 7 ARGS=2 ...
- 小程序的生命周期 launchApp
https://developers.weixin.qq.com/miniprogram/dev/api/launchApp.html?search-key=生命周期 launchApp(OBJECT ...