题目描述

"Let it Bead" company is located upstairs at 700 Cannery Row in Monterey, CA. As you can deduce from the company name, their business is beads. Their PR department found out that customers are interested in buying colored bracelets. However, over 90 percent of the target audience insists that the bracelets be unique. (Just imagine what happened if two women showed up at the same party wearing identical bracelets!) It's a good thing that bracelets can have different lengths and need not be made of beads of one color. Help the boss estimating maximum profit by calculating how many different bracelets can be produced.

A bracelet is a ring-like sequence of s beads each of which can have one of c distinct colors. The ring is closed, i.e. has no beginning or end, and has no direction. Assume an unlimited supply of beads of each color. For different values of s and c, calculate the number of different bracelets that can be made.

输入

Every line of the input file defines a test case and contains two integers: the number of available colors c followed by the length of the bracelets s. Input is terminated by c=s=0. Otherwise, both are positive, and, due to technical difficulties in the bracelet-fabrication-machine, cs<=32, i.e. their product does not exceed 32.

输出

For each test case output on a single line the number of unique bracelets. The figure below shows the 8 different bracelets that can be made with 2 colors and 5 beads.

样例输入

1 1
2 1
2 2
5 1
2 5
2 6
6 2
0 0

样例输出

1
2
3
5
8
13
21

提示


前言:

  通过这道题深入了解一下burnside和polya,我尽力用简单朴素的方式理解

简述题意:

  一个长为n的手镯,每个珠子可以染成k中颜色中的一种,求本质不同的染色方案有多少种?(可以旋转、翻转

burnside是用来求关于一个置换群下有多少本质不同的染色方案的

置换就是从一个顺序换成另一个顺序的操作,很多个置换就是置换群
要使用burnside,第一步就是找到所有置换,一定要是所有的!不重不漏(这一点上我迷惑了挺久来着233
就拿这道题来说,虽然看似就两种置换,旋转与翻转,但实际上要比两个多得多,转一个珠子,转两个。。。转n个,以及沿不同的轴翻转
找置换的好方法就是标号,(接下来我们把环拆成一个序列,总之起点是一个固定的位置
比如说n=4时,开始是1,2,3,4
有一种置换就是什么都不做,也是转动0个珠子,这样就变成了1,2,3,4
接下来还有3种转动方式,分别会变成
2,3,4,1
3,4,1,2
4,1,2,3
而翻转我们可以找到这4种:(你可以画画图233
2,1,4,3
4,3,1,2
1,4,3,2
3,2,1,4
接下来你会发现无论你怎么组合以上的组合,得到的结果还在其中,这样我们找到的就是全部的置换了~
解决了置换群,我们来解决不动点
不动点是针对每种置换而言的,是指染色后,无论经过这个置换多少次,都不会变化的的染色方案
比如当我们有2种颜色,对于置换2,1,4,3
如果我们染成1,1,2,2,那么经过置换后还是能得到自己,还是1,1,2,2,这就是对于这个置换的一个不动点
burnside是这么说的:置换群里所有置换的不动点数量的平均值就是本质不同的染色方案总数
现在我们只需要求出对于每种置换的不动点数量就好了~
首先要知道循环节,对于一个置换而言,假如说我们画一个箭头指向每个位置将要去的下一个位置
就会发现他们形成了若干个环。
比如2,1,4,3,就成了2个环,一个是1,2,一个是3,4,这就是两个循环节
polya一个置换的不动点数就是k^x,其中k是颜色数,x是循环节数
使用这两个定理我们就能解决这道题了!
首先对于一个转动i个珠子的旋转来说,循环节数是gcd(i,n)
让所有珠子从0到n-1标号,设一个循环节的起点是x,转了t次后第一次回来
有x=(x+t*i)%n,所以(t*i)%n==0,t*i=k*n也就是说t*i=lcm(i,n)
那么循环节数量n/t就是gcd(i,n)了
对于翻转,我们分奇偶讨论,
奇数只能选择一个珠子和对应的边作为对称轴,一共n个,每个有(n+1)/2个循环节
偶数可以选择两个珠子作为对称轴,一共n/2个,每个有(n+2)/2个循环节
还可以选择两个边作为对称轴,一共n/2个,每个有n/2个循环节
看代码吧:
 #include<cstdio>
#define ll long long
using namespace std;
int n,k;
ll ans;
ll gcd(ll a,ll b){
if(!b)return a;
return gcd(b,a%b);
}
ll ksm(ll x,ll t){
ll ans=;
for(;t;t>>=,x*=x)if(t&)ans*=x;
return ans;
}
int main(){
while(scanf("%d%d",&k,&n)){
if(n==&&k==)break;
ans=;
for(int i=;i<=n;i++)ans+=ksm(k,gcd(i,n));
if(n&)ans+=ksm(k,(n+)/)*n;
else{
ans+=ksm(k,(n+)/)*n/;
ans+=ksm(k,n/)*n/;
}
ans/=*n;
printf("%lld\n",ans);
}
return ;
}

Burnside引理和polay计数 poj2409 Let it Bead的更多相关文章

  1. Burnside引理和polay计数学习小记

    在组合数学中有这样一类问题,比如用红蓝两种颜色对2*2的格子染色,旋转后相同的算作一种.有多少种不同的染色方案?我们列举出,那么一共有16种.但是我们发现,3,4,5,6是同一种,7,8,9,10是用 ...

  2. Burnside引理和Polya定理之间的联系

    最近,研究了两天的Burnside引理和Polya定理之间的联系,百思不得其解,然后直到遇到下面的问题: 对颜色限制的染色 例:对正五边形的三个顶点着红色,对其余的两个顶点着蓝色,问有多少种非等价的着 ...

  3. Burnside引理和Polya定理

    转载自:https://blog.csdn.net/whereisherofrom/article/details/79631703 Burnside引理 笔者第一次看到Burnside引理那个公式的 ...

  4. Burnside引理与polay定理

    #Burnside引理与polay定理 引入概念 1.置换 简单来说就是最元素进行重排列 是所有元素的异议映射,即\([1,n]\)映射到\([1,n]\) \[ \begin{pmatrix} 1& ...

  5. polay计数原理

    公式: Burnside引理: 1/|G|*(C(π1)+C(π2)+C(π3)+.....+C(πn)): C(π):指不同置换下的等价类数.例如π=(123)(3)(45)(6)(7),X={1, ...

  6. poj2409 Let it Bead

                                                                      Let it Bead Time Limit: 1000MS   M ...

  7. POJ 2409 Let it Bead(polay计数)

    题目链接:http://poj.org/problem?id=2409 题意:给出一个长度为m的项链,每个珠子可以用n种颜色涂色.翻转和旋转后相同的算作一种.有多少种不同的项链? 思路: (1) 对于 ...

  8. Luogu P5564 [Celeste-B]Say Goodbye (多项式、FFT、Burnside引理、组合计数)

    题目链接 https://www.luogu.org/problem/P5564 题解 这题最重要的一步是读明白题. 为了方便起见下面设环长可以是\(1\), 最后统计答案时去掉即可. 实际上就相当于 ...

  9. BZOJ 1488 Luogu P4727 [HNOI2009]图的同构 (Burnside引理、组合计数)

    题目链接 (Luogu) https://www.luogu.org/problem/P4727 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.ph ...

随机推荐

  1. Eclipse导入外部项目问题总结

     此次在项目开发过程中导入从oksvn下载的共享项目时出现几个项目在不同的IDE导入导出时的问题,为免忘记做例如以下笔记: 1 类路径问题 在Java开发中大多数的开发人员使用的IDE是MyEcl ...

  2. git-svn for mac

    熟练使用 git ,新公司用的是 svn,这就尴尬了,为了这个习惯问题,我还是毅然坚持使用 git,但是又不与公司的 svn 冲突,所以就找到了 git 的 git-svn 插件. 在 mac 上使用 ...

  3. P2453 [SDOI2006]最短距离 dp

    自己想出来了!这个dp比较简单,而且转移也很简单,很自然,直接上代码就行了. 题干: 一种EDIT字母编辑器,它的功能是可以通过不同的变换操作可以把一个源串X [l..m]变换为新的目标串y[1..n ...

  4. Poj2054 color a tree && [HNOI/AHOI2018]排列

    https://zybuluo.com/ysner/note/1120723 题面 原题 某省选强化题 大致意思是给你一颗树,选父亲后才能选儿子. 每个点对答案的贡献为你在第几次选这个点 × 该点权值 ...

  5. JAVA Swing 组件演示***

    下面是Swing组件的演示: package a_swing; import java.awt.BorderLayout; import java.awt.Color; import java.awt ...

  6. 36.面板Ext.Panel使用

    转自:https://www.cnblogs.com/linjiqin/archive/2011/06/22/2086620.html 面板Ext.Panel使用 概要 1.Ext.Panel概述 2 ...

  7. [Swift通天遁地]二、表格表单-(18)快速应用多种预定义格式的表单验证

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  8. JavaScript中相等==和严格相等===的区别

    在JavaScipt中==(相等)和===(严格相等,strick equality 也有译作“恒等”.“全等”)用于比较两个值是否相等,两个运算符允许任意类型的操作数.如果操作数相等则返回true, ...

  9. 利用Kibana来查看和管理Elasticsearch的索引(Kibana使用篇)

    经过前面几篇的学习,我们已经知道如何在Kibana里边对Elasticsearch进行操作了,那么如何查看已存在的索引呢,我们来看, 在Management里边可以看到我们刚刚创建的sdb索引.另外还 ...

  10. javascript中for...in和for...of的区别

    for...of循环是ES6引入的新的语法. for...in遍历拿到的x是键(下标).而for...of遍历拿到的x是值,但在对象中会提示不是一个迭代器报错.例子如下: let x; let a = ...