![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数学—置换群
文章平均质量分 74
My_ACM_Dream
生活没有彩排每天都是现场直播
展开
-
poj 1286 Necklace of Beads (polya)
题意:对已个正n边形的点染色,可以染3种颜色,如果旋转或者对折后蓝色情况相同认为是一种染色方法,问有多少种染色方法。题解:分别考虑旋转和折叠的情况,并且要分奇数点和偶数点来考虑。#include#include#include#include#include#include#include#include#include#define B(x) (1<<(x))原创 2015-04-11 18:43:02 · 356 阅读 · 0 评论 -
hdu 2865 Birthday Toy (polya,好题)
题意:有一个环由n个组合和一个中心珠子组成,现在有k中颜色,问相邻的不能同色的染色方案数。题解:这题的n很大所以只能枚举约数gcd(n,i)=r,但是k也超级大,完全无法用关系矩阵解决。那么要考虑是否有规律。对于中心有珠子的这种染色法,明显可以枚举中心珠子的颜色,然后计算k-个颜色嫩染多少种的情况,最后乘以k即可。我们可以枚举外围的第一个珠子颜色,然后用dp解决这种排列问题。现在假设枚原创 2015-04-23 16:18:16 · 804 阅读 · 0 评论 -
polya补提链接
链接原创 2015-04-27 16:38:52 · 597 阅读 · 0 评论 -
poj 2888 Magic Bracelet (polya,矩阵)
题意:一个n个节点的环,可以涂m中不同的颜色,但是有k对颜色是不能相邻的。现在问有多少种涂法。题解:这题我们枚举gcd(n,i)=k,判断有多少个i满足k统一计算,相当于求n/k的欧拉函数,对于k对颜色无法相邻的这个限制,我们将能相邻的定义成关系矩阵,这样k次幂后就能计算出对应的不懂置换的个数,接着用容斥处理欧拉函数,或者用欧拉定理求。#include#include#incl原创 2015-04-21 21:26:55 · 518 阅读 · 0 评论 -
poj 2154 Color (polya,欧拉函数|容斥原理)
题意:有n种颜色的珠子要串成长度为n的环,有多少种方案。题解:因为n很大很大,考虑优化。对于n个旋转,任意一个旋转i,他的循环节个数时gcd(n,i),令a=gcd(n,i)发现等于a的i有多个,并且a也就是n的约数并不多,那么就可以枚举约数这样复杂度降到O(sqrt(n))已经很优秀了。那么对于某个约数a,能使得gcd(n,i)=a的i的个数要怎么就算呢?其实这个问题可以转化成求原创 2015-04-14 21:52:09 · 652 阅读 · 0 评论 -
hdu 3923 Invoker (polya,扩展gcd)
题意:n种颜色串成m长度的环的方案数,赤裸裸的polya,ans/(2*n)%MOD要用到乘法逆元,用扩展欧几里得求解。题解:扩展欧几里得算法扩展欧几里德算法是用来在已知a, b求解一组x,y,使它们满足贝祖等式: ax+by = gcd(a, b) =d(解一定存在,根据数论中的相关定理)。扩展欧几里德常用在求解模线性方程及方程组中。int ex_gcd(int a,原创 2015-04-14 17:00:37 · 797 阅读 · 0 评论 -
poj 3128 Leonardo's Notebook (置换群)
题意:一个长度为26的字符串,包含26个字母,问这个置换能否是其他某个置换的平方。题解:首先引入定理:1.任意一个长为 L 的置换的k次幂,会把自己分裂成gcd(L,k) 分, 并且每一份的长度都为 L / gcd(l,k)2.假如 d = gcd(L,K),l = L / gcd(L,k),那么我们只需要找到d个长为l的循环,将他们交错循环连接成一个长为 d * l 的大循环原创 2015-04-08 20:12:55 · 520 阅读 · 0 评论 -
poj 1721 CARDS (置换群)
求置换s次后的结果#include#include#include#include#include#include#include#include#include#define B(x) (1<<(x))using namespace std;typedef long long ll;void cmax(int& a,int b){ if(b>a)a=b; }vo原创 2015-04-08 18:42:31 · 425 阅读 · 0 评论 -
uva 11255 Necklace (polya)
题意:给出种颜色的球的个数,现在要将全部的球拼成一个环,有多少种拼发。题解:分成两种情况,1、翻折;2、旋转。1、翻折。要分奇数和偶数,奇数只有一种翻折方法就是定点和边中点连线为轴转,偶数即可是定点和定点也可以是边和边。2、旋转。每种旋转循环节长度都是能被环的长度整数的,因此只要找到循环节的个数(gcd(n,i)),长度就可以计算出来了。注意数据量,要用高精度。#inc原创 2015-04-13 20:54:33 · 538 阅读 · 0 评论 -
uva 10601 Cubes (polya)
题意:有6种颜色,现在给出各个颜色的个数,要在正方体上染色,有几种染法。题解:这题因为颜色种类的个数给出了,只能用burnside引理来做。对于每种置换计算等价的个数。总共有四种变换1、自身不变。循环节12个,长度12、根据定点连线为轴旋转120度、240度。循环节4个,长度33、根据对面的中心连线为轴旋转90、180、270度。90、270循环节个数3,长度4。180原创 2015-04-13 16:59:19 · 748 阅读 · 0 评论 -
poj 2409 Let it Bead (polya)
#include#include#include#include#include#include#include#include#include#define B(x) (1<<(x))using namespace std;typedef long long ll;void cmax(int& a,int b){ if(b>a)a=b; }void cmin(int&原创 2015-04-12 10:37:54 · 454 阅读 · 0 评论 -
poj 1026 Cipher (置换群)
求一个置换的第k次置换的结果。#include#include#include#include#include#include#include#include#include#define B(x) (1<<(x))using namespace std;typedef long long ll;typedef unsigned long long ull;void原创 2015-04-07 23:53:37 · 401 阅读 · 0 评论 -
poj 3270 Cow Sorting (置换群)
题意:有n头牛,无序的排成一排,每个牛有一个权值w,现在要将牛按权值递增排序,每次可以交换两头牛的位置并且所需的代价是这两头牛的权值和,问使得牛权值按递增排序需要的最代价。题解:置换群的应用,每轮交换的最小代价要么就是指环内部取一个最小的作为踏板交换,要么就是在外部找一个最小的作为踏板交换,去两者的最小值。dfs出每个轮换,然后对每个轮换按上诉操作,最终累加得最优解。#includ原创 2015-04-07 21:55:24 · 476 阅读 · 0 评论 -
polya|burnside定理的一些总结
基于正方形的置换:(hdu 1812)旋转只有 0,90,180,270度三种旋法。旋0度,则置换的轮换数为n*n旋90度,n为偶数时,则置换的轮换数为n*n/4,n为奇数,则置换的轮换数为(n*n-1)/4+1旋180度,n为偶数时,则置换的轮换数为n*n/2,n为奇数,则置换的轮换数为(n*n-1)/2+1旋270度,n为偶数时,则置换的轮换数为n*n/4,n为奇数,则置换原创 2015-04-27 16:35:19 · 1347 阅读 · 0 评论