polya burnside 专题
polya题目:uva 11077 Find the Permutations
uva 10294 Arif in Dhaka
LA 3641 Leonardo's Notebook
uva 11077 Find the Permutations
HOJ 2084 The Colored Cubes
HOJ 2647 Megaminx
POJ 1286 Necklace of Beads
POJ 2409 Let it Bead
TOJ 2795 The Queen's New Necklaces
HDU 1812 Count the Tetris
UVa 11255 Necklace
POJ 2154 Color
POJ 2888 Magic Bracelet
UVa 10601 Cubes
NUAA 1110
uva 10294 Arif in Dhaka(项链和手镯)
题目大意:项链和手镯都是由若干珠子穿成的环形首饰,区别在于手镯可以翻转,但项链不可以。输入整数n和t,输出用t种颜色的n颗珠子(每种颜色的珠子个数无限制,但珠子总数必须是n)能制作成的项链和手镯个数。
分析:一共有两种置换,即旋转和翻转,其中项链只有第一种置换,而手镯有两种。
旋转:如果逆时针旋转i颗珠子的间距,则珠子0、i、2i、....构成一个循环。这个循环有n/gcd(i,n)个元素。根据对称性所有循环的长度均相同,因此一共有gcd(i,n)个循环。这些置换的不动点总数a=Σtgcd(i,n) ,(0<i<n)。
翻转:需要分两种情况讨论。当n为奇数时,对称轴有n条,每条对称轴形成(n-1)/2个长度为2的循环和一个长度为1的循环,即(n+1)/2个循环。这些置换不动点总数为b=nt(n+1)/2 。当n为偶数时,有两种对称轴。穿过珠子的对称轴有n/2条,各形成n/2-1个长度为2的循环和2个长度为1的循环;不穿过珠子的对称轴有n/2条,各形成n/2个长度为2的循环。这些置换不动点的总数b=n/2(tn/2+1+tn/2)。
#include<iostream>
using namespace std; typedef long long LL;
LL power[]; int gcd(int a,int b)
{
return b?gcd(b,a%b):a;
} int main()
{
int n,i,t;
LL a,b;
power[]=;
while(cin>>n>>t)
{
for(i=;i<=n;i++) power[i]=power[i-]*t;
a=;
for(i=;i<n;i++)
a+=power[gcd(i,n)];
if(n%) b=n*power[(n+)/];
else b=n/*(power[n/+]+power[n/]);
cout<<a/n<<" "<<(a+b)//n<<endl;
}
return ;
}
LA 3641 Leonard's Notebook
题目大意:给出26个大写字母的置换B,问是否存在一个置换A,使得A^2=B。
分析:置换A与A^2有着怎样的关系。先把A做循环分解,比如A=(a1 a2 a3)(b1 b2 b3 b4)。那么
A^2=(a1 a2 a3)(b1 b2 b3 b4)(a1 a2 a3)(b1 b2 b3 b4)
注意不相交的循环的乘法满足交换率
A^2=(a1 a2 a3)(a1 a2 a3)(b1 b2 b3 b4)(b1 b2 b3 b4)
根据置换乘法的结合律:
1 2 3 * 1 2 3 = 1 2 3
2 3 1 2 3 1 3 1 2 (a1 a2 a3)(a1 a2 a3)=(a1 a3 a2)
1 2 3 4 * 1 2 3 4 = 1 2 3 4
2 3 4 1 2 3 4 1 3 4 1 2 (b1 b2 b3 b4)(b1 b2 b3 b4)=(b1 b3)(b2 b4)
不难得出如下规律,两个长度为n的相同循环相乘,当n为奇数时结果也是一个长度为n的循环;当n为偶数时分裂为两个长度为n/2的循环。相反,对于任意一个长度n为奇数的循环B,都能找到一个长度为n的循环使得A^2=B;对于任意两个长度n的且不相交循环B和C,都能找到一个长度为2n的循环A使得A^2=BC。
反过来说。对B中的循环。
长度n为奇数的循环可以是A中一个长度为n的循环产生的如(2 3 1)(2 3 1)=(1 3 2),也可以与B中另一个长度n的循环是A中一个长度为2n的循环产生的如(2 3 4 5 6 1)(2 3 4 5 6 1)=(1 3 5)(2 4 6)
长度n为偶数的循环只能是与B中另一个长度n的循环是A中一个长度为2n的循环产生的如(2 3 4 1)(2 3 4 1)=(1 3)(2 4)。
所以对于B中任意偶数长度的循环,这个长度的循环的个数必须是偶数才能配对。所以只要能配对成功,一定有解,否则无解。
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std; int main()
{
int t,i,j,f[],n,flag;
char s[];
bool vis[];
scanf("%d",&t);
while(t--)
{
scanf("%s",s);
memset(vis,false,sizeof(vis));
memset(f,,sizeof(f));
for(i=;i<;i++)
{
if(!vis[i])
{
j=i;n=;
do{
vis[j]=true;
j=s[j]-'A';
n++;
}while(i!=j);
f[n]++;//长度为n的循环个数+1
}
}
flag=;
for(i=;i<=;i+=)//长度n为偶数的循环能否配对
{
if(f[i]%)
{
flag=;break;
}
}
if(flag) printf("Yes\n");
else printf("No\n");
}
return ;
}
uva 11077 Find the Permutations
题目大意:给出1-n的一个排列,可以通过一系列的交换变成{1,2,3,....,n}。比如{2,1,4,3}需要两次交换(1和2,3和4),{4,2,3,1}只需交换一次(1和4),{2,3,4,1}需要三次,而{1,2,3,4}本身一次都不需要。给定n和k,统计有多少个排列至少需要交换k次才能变成{1,2,3....n}。
分析:不难发现单个元素不需要交换,2个元素要交换一次,3个元素要交换两次,.....,c个元素的循环要交换c-1次。这样,如果排列p的循环节为x个,则总的交换次数为n-x次。有了上述结论,就不难进行递推了。设f(i,j)表示满足“至少需要交换j次才能变成{1,2,3,...,i}”的排列个数,则f(i,j)=f(i-1,j)+f(i-1,j-1)*(i-1),因为元素i要么自己形成一个循环,要么加入前面任意一个循环的任意一个位置(i-1个)。边界f(1,0)=1,其他f(1,j)=0。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; typedef unsigned long long LL;
LL f[][]; int main()
{
int i,j;
memset(f,,sizeof(f));
f[][]=;
for(i=;i<;i++)
{
for(j=;j<i;j++)
{
f[i][j]=f[i-][j];
if(j) f[i][j]+=f[i-][j-]*(i-);
}
}
while(cin>>i>>j,i+j) printf("%llu\n",f[i][j]);
return ;
}
polya burnside 专题的更多相关文章
- polya/burnside 学习
参考链接: http://www.cnblogs.com/hankers/archive/2012/08/03/2622231.html http://blog.csdn.net/raalghul/a ...
- 【BZOJ】1004: [HNOI2008]Cards(置换群+polya+burnside)
http://www.lydsy.com/JudgeOnline/problem.php?id=1004 学习了下polya计数和burnside引理,最好的资料就是:<Pólya 计数法的应用 ...
- [POJ 2888]Magic Bracelet[Polya Burnside 置换 矩阵]
也许更好的阅读体验 \(\mathcal{Description}\) 大意:给一条长度为\(n\)的项链,有\(m\)种颜色,另有\(k\)条限制,每条限制为不允许\(x,y\)颜色连在一起.要求有 ...
- 博客索引and题目列表
目录 笔记整理 计划 要学的东西 缺省源 要做的题 搜索 高斯消元 矩阵 排列组合 2019.7.9 2019.7.10 kmp ac自动机 2019.7.11 2019.7.15 笔记整理 1.同余 ...
- POJ burnside&&polya整理练习
POJ 2409 Let it Bead 这题就是polya公式的直接套用,唯一麻烦的是置换群的种类数,由于可以翻转,所以除了要加上pow(c,gcd(s,i))这些平面旋转的置换群,还要加上翻转的. ...
- Burnside引理和Polya定理之间的联系
最近,研究了两天的Burnside引理和Polya定理之间的联系,百思不得其解,然后直到遇到下面的问题: 对颜色限制的染色 例:对正五边形的三个顶点着红色,对其余的两个顶点着蓝色,问有多少种非等价的着 ...
- Burnside引理与Polya定理
感觉这两个东西好鬼畜= = ,考场上出了肯定不会qwq.不过还是学一下吧用来装逼也是极好的 群的定义 与下文知识无关.. 给出一个集合$G = \{a, b, c, \dots \}$和集合上的二元运 ...
- Burnside引理与Polya定理 学习笔记
原文链接www.cnblogs.com/zhouzhendong/p/Burnside-Polya.html 问题模型 有一个长度为 $n$ 的序列,序列中的每一个元素有 $m$ 种取值. 如果两个序 ...
- burnside+polya 整理
先定义几个含义和符号:起始状态/方法/位置/元素/:以染色为例,起始状态是所有的染色方案,方法是以起始状态所有染色方案为基准转变为新的染色情景的操作(如旋转),位置则必须是没有任何染色效果的抽象空间, ...
随机推荐
- 51nod 1526 分配笔名
题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 320 难度:7级算法题. 班里有n个同学.老师为他们选了n个笔名.现在要把这些笔名分配给每一个同学,每一 ...
- 洛谷 First Step (ファーストステップ) 3月月赛T1
题目背景 知らないことばかりなにもかもが(どうしたらいいの?) 一切的一切 尽是充满了未知数(该如何是好) それでも期待で足が軽いよ(ジャンプだ!) 但我仍因满怀期待而步伐轻盈(起跳吧!) 温度差なん ...
- (六)maven之本地仓库
本地仓库 ① 运行机制: 当用户在pom.xml文件中添加依赖jar包时,maven会先从本地仓库查找,如果这个jar包在本地仓库中找不到,就从中央仓库下载到本地仓库,中央仓库是maven默认 ...
- org.springframework.beans.factory.BeanCreationException: Could not autowire
由于我在项目中引用了如下代码,增加了 @Configurationpublic class Connection { public @Bean HttpClientConfig httpClie ...
- 栈的应用——Rails
一.题目描述 某城市有一个火车站,有n节车厢从A方向驶入车站,按进站顺序编号为1~n,经中转站C驶向B.中转站C,这是一个可以停放任意多节车厢的车站,但由于末端封顶,驶入C的车厢必须以相反的顺序驶出C ...
- Asp.Net Core 进阶(一) —— 读取appsettings.json
我们以前在Asp.Net MVC中使用 System.Configuration.ConfigurationManager 来读取web.config文件.但是Asp.Net Core MVC已经没有 ...
- pb2.text_format.Merge(f.read(), self.solver_param) AttributeError: 'module' object has no attribute 'text_format'
http://blog.csdn.net/qq_33202928/article/details/72526710
- 新浪oAuth授权
首先要拥有一个微博账号 第一步 成为新浪开发者 1.登录微博开发者界面 open.weibo.com 2. 点击登录 点击移动应用,创建应用 3.需要进行开发者认证,填写个人信息及邮箱认证,等 ...
- 【图论 动态规划拆点】luoguP3953 逛公园
经典的动态规划拆点问题. 题目描述 策策同学特别喜欢逛公园.公园可以看成一张 NN 个点 MM 条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口, NN 号点是公园的出口,每条边有一个非负 ...
- 力扣题目汇总(重复N次元素,反转字符串,斐波那契数)
重复 N 次的元素 1.题目描述 在大小为 2N 的数组 A 中有 N+1 个不同的元素,其中有一个元素重复了 N 次. 返回重复了 N 次的那个元素. 示例 1: 输入:[1,2,3,3] 输出:3 ...