【poj2409】 Let it Bead
http://poj.org/problem?id=2409 (题目链接)
题意
一个n个珠子的项链,每个珠子可以被染成t种颜色。项链可以翻转和旋转,问不同的染色方案数。
Solution
Pólya定理。
旋转:如果逆时针旋转i颗珠子的间距,则珠子0,i,2i,······构成一个循环。这个循环有n/gcd(n,i)个元素。根据对称性,所有循环的长度相同,因此一共有gcd(n,i)个循环。这些置换的不动点总数为${\sum_{i=0}^{n-1} t^{gcd(i,n)}}$种,其中t为颜色数。
翻转:需要分两种情况讨论。当n为奇数时,对称轴有n条,每条对称轴形成${\frac{n-1}{2}}$个长度为2的循环和1个长度为1的循环,即一共${\frac{n+1}{2}}$个循环。这些置换的不动点总数为${b = n t^{ \frac{n+1}{2} }}$。当n为偶数时,有两种对称轴。穿过柱子的对称轴有${\frac{n}{2}}$条,各形成${\frac{n}{2}-1}$个长度为2的循环和两个长度为1的循环;不穿过珠子的对称轴有${\frac{n}{2}}$条,各形成${\frac{n}{2}}$个长度为2的循环。这些置换的不动点总数为${b=\frac{n}{2} (t^{\frac{n}{2}+1}+t^{\frac{n}{2}})}$。
代码
- // poj2409
- #include<algorithm>
- #include<iostream>
- #include<cstdlib>
- #include<cstring>
- #include<cstdio>
- #include<cmath>
- #define LL long long
- #define inf 1<<30
- #define Pi acos(-1.0)
- #define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
- using namespace std;
- LL gcd(LL a,LL b) {
- return b==0 ? a : gcd(b,a%b);
- }
- LL power(LL a,LL b) {
- LL res=1;
- while (b) {
- if (b&1) res*=a;
- b>>=1;a*=a;
- }
- return res;
- }
- int main() {
- LL n,t;
- while (scanf("%lld%lld",&t,&n)!=EOF && n && t) {
- LL a=0,b=0;
- for (int i=0;i<n;i++) a+=power(t,gcd(n,i));
- if (n&1) b=n*power(t,(n+1)/2);
- else b=n/2*(power(t,n/2+1)+power(t,n/2));
- printf("%lld\n",(a+b)/2/n);
- }
- return 0;
- }
【poj2409】 Let it Bead的更多相关文章
- 【POJ2409】Let it Bead Pólya定理
[POJ2409]Let it Bead 题意:用$m$种颜色去染$n$个点的环,如果两个环在旋转或翻转后是相同的,则称这两个环是同构的.求不同构的环的个数. $n,m$很小就是了. 题解:在旋转$i ...
- 【poj2409】Let it Bead Polya定理
题目描述 用 $c$ 种颜色去染 $r$ 个点的环,如果两个环在旋转或翻转后是相同的,则称这两个环是同构的.求不同构的环的个数. $r·c\le 32$ . 题解 Polya定理 Burnside引理 ...
- 【转】ACM训练计划
[转] POJ推荐50题以及ACM训练方案 -- : 转载自 wade_wang 最终编辑 000lzl POJ 推荐50题 第一类 动态规划(至少6题, 和 必做) 和 (可贪心) (稍难) 第二类 ...
- 【caffe-windows】 caffe-master 之Matlab中model的分类应用
此篇讲述在matlab中,如何将训练好的model用于图像分类.将以mnist为例,主要用到caffe-master\matlab\demo 下的classification_demo.m ,可参考我 ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- 【原】谈谈对Objective-C中代理模式的误解
[原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...
- 【原】FMDB源码阅读(三)
[原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【调侃】IOC前世今生
前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...
随机推荐
- 遍历datatable的方法汇总
遍历datatable的方法方法一: DataTable dt = dataSet.Tables[]; ; i < dt.Rows.Count ; i++) { string strName = ...
- 弹出iframe内嵌页面元素到父页面并全屏化
(注册博客好久了,一直没舍得添砖加瓦,主要是每次想写点东西的时候,随便搜一搜发现都比我总结的都要好,甚感尴尬,但是总是要开始的,所以这就是我的第一篇博客,也绝不会是最后一篇,废话不多说,直接入正题) ...
- div 模拟<select>事件
IE7 下,不能够自定义<select>/<option>的样式,所以为了方便起见,用div可以进行模拟 <!doctype html> <html> ...
- AngularJS下对数组的比较
Javascript不能直接用==或者===来判断两个数组是否相等,无论是相等还是全等都不行,以下两行JS代码都会返回false <script type="text/javascri ...
- 利用BI搭建零售业数据信息平台
某百货公司是全市规模最大的以零售为主.多元化经营的股份制商业企业.拥有员工数千人,经营国内外品牌2300余种,年商品销售额逾10亿人元. 销售体量如此庞大的企业近几年在IT建设上出现了问题,集团内部的 ...
- ArcGIS Engine开发之地图文档保存
在对地图文档进行修改后,经常需要对其进行保存.地图文档的保存有直接保存和另存为两种方式.这里的地图文档的修改指的是修改地图文档文件记录信息,不是对空间数据的编辑. 1.地图文档保存 具体实现的思路: ...
- Exploitation with Social Engineering Toolkit SET
下面演示如何使用S.E.T工具创建Payload并配置Armitage实现目标主机自动上线. 打开S.E.T工具选择第一项,进行Attacks配置. 选择4创建一个Payload和Listener. ...
- Xcode8+和iOS10+使用Masonry自动计算行高
说起tableView的自动计算行高,真的是不想再提了,写了不知道几百遍了.可就是这麽一个小玩意儿,把我给难的不行不行的,眼看都要没头发了. 1.设置tableView的预估行高和行高为自动计算 // ...
- android Fragments介绍
Fragments是Android3.0引入的概念,译为片段.碎片,为了解决不同屏幕分辩率的动态和灵活UI设计. Fragment表现Activity中UI的一个行为或者一部分.可以将多个fragme ...
- JAVA中的for-each循环与迭代
在学习java中的collection时注意到,collection层次的根接口Collection实现了Iterable<T>接口(位于java.lang包中),实现这个接口允许对象成为 ...