POJ 2409 Let it Bead (Polya定理)
题意
用k种颜色对n个珠子构成的环上色,旋转翻转后相同的只算一种,求不等价的着色方案数。
思路
Polya定理
X是对象集合{1, 2, ……, n}, 设G是X上的置换群,用M种颜色染N种对象,则不同的染色方案数为: λ(g)表示置换g的轮换个数,且λ(g) = λ1(g) + λn(g) + …… + λn(g),其中λi(g)表示g中长度为i的轮换(循环)个数.
本题是对一个n个珠子的圆珠的颜色,而圆珠的置换群有: Ⅰ翻转:1.当n为奇数时,有n种翻转,每种翻转的轴都是一个顶点和该顶点对边中点的连线,有n种置换,每种置换的轮换个数均为(n/2+1)。 2.当n为偶数时,有n种翻转,其中n/2种转轴是两个对应顶点连线,轮换个数为n/2+1;另n/2种转轴是两条对边中点的连线,轮换个数为n/2。 Ⅱ旋转:枚举旋转角度360/n*i,有n种旋转;第i种旋转有gcd(n, i)个轮换,每个轮换的长度都是n/gcd(n, i)。 然后带入公式即可.
代码
[cpp] #include <iostream> #include <cstdio> #include <cmath> #include <algorithm> #include <string> #include <cstring> #include <vector> #include <set> #include <stack> #include <queue> #define MID(x,y) ((x+y)/2) #define MEM(a,b) memset(a,b,sizeof(a)) #define REP(i, begin, end) for (int i = begin; i <= end; i ++) using namespace std; int gcd(int a, int b){ return b?gcd(b, a%b):a; } int main(){ //freopen("test.in", "r", stdin); //freopen("test.out", "w", stdout); int c, s; while(scanf("%d %d", &c, &s) != EOF){ long long res = 0; if (c + s == 0) break; if (s % 2 == 1){ res += (long long)s * pow(c, s/2+1); } else{ res += (long long)(s/2) * (pow(c, s/2) + pow(c, s/2+1)); } for (int i = 1; i <= s; i ++){ res += (long long)pow(c, gcd(s, i)); } printf("%I64d\n", res/2/s); } return 0; } [/cpp]
转载于:https://www.cnblogs.com/AbandonZHANG/p/4114132.html
POJ 2409 Let it Bead (Polya定理)相关推荐
- poj 2409 Let it Bead Polya计数
旋转能够分为n种置换,相应的循环个数各自是gcd(n,i),个i=0时不动,有n个 翻转分为奇偶讨论,奇数时有n种置换,每种有n/2+1个 偶数时有n种置换,一半是n/2+1个,一半是n/2个 啃论文 ...
- 置换群Polya定理(poj 2409: Let it Bead)
可以先看 置换群burnside引理(bzoj 1004: [HNOI2008]Cards) Polya定理公式(必须在没有限制下才能使用此公式): 其中|G|为总置换数,m表示可用的颜色数,c(gi ...
- POJ 2409 Let it Bead【Polya定理】(模板题)
<题目链接> 题目大意: 用k种颜色对n个珠子构成的环上色,旋转.翻转后相同的只算一种,求不等价的着色方案数. 解题分析: 对于这种等价计数问题,可以用polay定理来解决,本题是一道po ...
- 解题报告 (五) Burnside引理和Polya定理
Burnside引理 笔者第一次看到Burnside引理那个公式的时候一头雾水,找了本组合数学的书一看,全是概念.后来慢慢从Polya定理开始,做了一些题总算理解了.本文将从最简单的例子出发,解释Bu ...
- polya 定理总结
公式 用cc 种颜色对 nn 个置换群G1,G2,-,GnG_1,G_2,\dots ,G_n着色,设每个置换群的循环节数为kik_i那么不同的着色总数 PG=1|G|∑ni=1ckiP_G = \f ...
- poj 2409 polya定理
polya定理的入门题 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 using ...
- 【POJ 1286】Necklace of Beads(polya定理)
[POJ 1286]Necklace of Beads(polya定理) Necklace of Beads Time Limit: 1000MS Memory Limit: 10000K Tot ...
- Polya定理,Burnside引理
涉及到组合数学的问题,首先是群的概念: 设G是一个集合,*是G上的二元运算,如果(G,*)满足下面的条件: 封闭性:对于任何a,b∈G,有a*b∈G; 结合律:对任何a,b,c∈G有(a*b)*c=a ...
- poj2154 Color ——Polya定理
题目:http://poj.org/problem?id=2154 今天学了个高端的东西,Polya定理... 此题就是模板,然而还是写了好久好久... 具体看这个博客吧:https://blog.c ...
最新文章
- 2021年大数据ELK(二十三):Kibana简介
- Strut2判断是否是AJAX调用
- 解决htmlfile: 未知的运行时错误
- hibernate 继承_Hibernate继承:每个类层次结构的表
- romfs, cramfs和ramdisk
- Android 手游闪屏极简方案
- 历史上杀伤力最大的笑话!!!
- 90-70-010-源码-CUBE查询-源码
- java购物车 数据库_网上购物车数据库设计(转)
- XSpreadsheet-在线表格插件
- Android系统信息获取 之十四:获取WIFI热点相关信息
- 分享,用sql快速创建MODEL,快速提高工作效率哦
- shell 备份并删除几日内的历史文件
- VC++2010下载教程
- 2022年谷歌Chrome等浏览器在线打开编辑保存微软Office/金山WPS的Word、Excel和PPT技术方案大全
- 数值计算值第四期:解线性方程组的扰动分析
- swfupload 无法加载_解决 KindEditor SWFUpload 批量上传检测用户登录状态的问题
- UOJ#449. 【集训队作业2018】喂鸽子(期望dp)
- (25):SPA单页面的理解
- MapReduce任务卡在Running Job状态的多种解决方法
热门文章
- 中国人口较少民族作家研讨会
- 虚拟机Ubuntu18.04 root下 连接 windows 中 winScp
- MySQL和mq一致性,Mysql与Redis一致性问题
- java设计按月每天签到_java实现app签到功能
- 字符动图_手把手教你做一个python+matplotlib的炫酷的数据可视化动图
- android home键后计时拉起app_使用React Native完成App软件
- matlab求距离判别函数,求MATLAB的逐步判别程序 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
- 误差error,偏置bias,方差variance的见解
- 12bit灰度图像映射到8bit显示及python 实现
- Java生鲜电商平台-订单配送模块的架构与设计