UVA10294 Arif in Dhaka (群论,Polya定理)
题意
给你一个长为\(n\)的项链和手镯,每个珠子有\(m\)种颜色.
两个手镯定义为相同,即它们通过翻转和旋转得到一样的手镯.
两个项链定义为相同,即它们只能通过旋转得到一样的项链.
求出有多少种本质不同的项链和手镯.
\((1 \le n \le 50, 1 \le m \le 10)\)
题解
(参考了一下这篇大佬博客)
大白书上的原题,一个裸的Polya定理(逃
Polya定理 : $$L=\frac{1}{|G|}\sum \limits _{i=1} ^{|G|} m^{c(g_i)}$$
其中\(G=\{g_1, ..., g_s\}\) \(c(g_i)\)为置换\(g_i\)的循环节个数, \(L\)为本质不同的方案数, \(m\) 是可以选择的颜色种数.
首先考虑旋转 :
假设当前旋转\(i\)颗珠子,那么就有\(\gcd (n,i)\)个循环,每个循环长度则为\(\displaystyle \frac{n}{\gcd(n,i)}\).
这个证明同样参考了之前那篇博客....(我用 \(\LaTeX\) 再打一下..)
将珠子从\(0\)到\(n-1\)标号,那么对于旋转\(i\)位的置换,在以\(0\)号为起点,长度为\(t\)的一个循环节,
元素标号就为\(0,i \bmod n, 2i \bmod n, ... , (t-1)i \bmod n\).
所以就有\(t \cdot i \bmod n = 0\),即有\(t \cdot i = n \cdot k\). 使等式左右成立的最小正整数就为\(\mathrm{lcm} (n, i)\).
那么\(t \cdot i = \mathrm{lcm}(n,i)\)所以\(\displaystyle t=\frac{\mathrm{lcm}(n,i)}{i}=\frac{n}{\gcd(n,i)}\). 那么循环节个数就是\(\displaystyle \frac{n}{t}=\gcd(n,i)\).
所以这些置换的贡献就是\(a=\sum \limits_{i=0}^{n-1} m^{\gcd(i,n)}\).
再考虑一下翻转 :
这个要分序列奇偶性分别考虑,应该是比较好考虑的.
- 如果长度\(n\)为奇数,那么我们就只能沿着一个珠子翻转,那么就有\(\frac{n-1}{2}\)个长度为\(2\)的等价类 和 \(1\)个长度为\(1\)的等价类.
- 如果长度\(n\)为偶数,那么我们就有两种方式.沿着两个珠子翻转,那么就有\(\frac{n-2}{2}\)个长度为\(2\)的等价类和\(2\)个长度为\(1\)的等价类. 否则我们沿着两个珠子中间来翻转,那么就有\(\frac{n}{2}\)个长度为\(2\)的等价类.
所以这些置换的贡献就是 \(\displaystyle b=\begin{cases}n \cdot m^{\frac{n+1}{2}} & (m \ is \ odd)\\ \frac{n}{2}\cdot (m ^ {\frac{n}{2}+1}+m^{\frac{n}{2}}) &(m\ is\ even)\end{cases}\)
这样的话似乎会漏算情况(hany01大大问了下我)然后还是前面那篇大佬博客上有解释.
就是旋转再翻转的情况,肯定是其中另一种翻转.这也是因为群有封闭性,不管怎样\(*\)(二元运算)都是群内的元素.
最后要除以一个\(|G|\),项链只有\(n\)个置换群,手镯有\(2n\)个啦.
代码
#include <bits/stdc++.h>
#define For(i, l, r) for(register int i = (l), _end_ = (int)(r); i <= _end_; ++i)
#define Fordown(i, r, l) for(register int i = (r), _end_ = (int)(l); i >= _end_; --i)
#define Set(a, v) memset(a, v, sizeof(a))
using namespace std;
typedef long long ll;
bool chkmin(int &a, int b) {return b < a ? a = b, 1 : 0;}
bool chkmax(int &a, int b) {return b > a ? a = b, 1 : 0;}
void File() {
#ifdef zjp_shadow
freopen ("10294.in", "r", stdin);
freopen ("10294.out", "w", stdout);
#endif
}
const int N = 55;
ll n, t, Pow[N], a, b;
int main () {
File();
while (~scanf("%lld%lld", &n, &t) && n) {
Pow[0] = 1;
a = b = 0;
for (int i = 1; i <= n; ++i) Pow[i] = Pow[i - 1] * t;
for (int i = 0; i < n; ++ i) a += Pow[__gcd(i, (int)n)];
if (n & 1) b = n * Pow[n / 2 + 1];
else b = n / 2 * (Pow[n / 2 + 1] + Pow[n / 2]);
printf ("%lld %lld\n", a / n, (a + b) / 2 / n);
}
return 0;
}
UVA10294 Arif in Dhaka (群论,Polya定理)的更多相关文章
- [Uva10294]Arif in Dhaka
[Uva10294]Arif in Dhaka 标签: 置换 Burnside引理 题目链接 题意 有很多个珠子穿成环形首饰,手镯可以翻转和旋转,项链只能旋转.(翻转过的手镯相同,而项链不同) 有n个 ...
- Uva10294 Arif in Dhaka (置换问题)
扯回正题,此题需要知道的是置换群的概念,这点在刘汝佳的书中写的比较详细,此处不多做赘述.此处多说一句的是第二种手镯的情况.在下图中“左图顺时针转1个位置”和“右图顺时针旋转5个位置”是相同的,所以在最 ...
- UVA10294 Arif in Dhaka (First Love Part 2) —— 置换、poyla定理
题目链接:https://vjudge.net/problem/UVA-10294 题解: 白书P146~147. 为什么旋转i个间距,就有gcd(i,n)个循环,且每个循环有n/gcd(i,n)个元 ...
- UVA10294 Arif in Dhaka (First Love Part 2)
题意 PDF 分析 用n颗宝石串成项链和手镯, 每颗宝石的颜色可以t种颜色中的一种,当A类项链经过旋转得B类项链时,A和B属于一类项链, 而手镯不仅可以旋转还可以翻转,当A类手镯经过翻转得得到B类手镯 ...
- 【uva 10294】 Arif in Dhaka (First Love Part 2) (置换,burnside引理|polya定理)
题目来源:UVa 10294 Arif in Dhaka (First Love Part 2) 题意:n颗珠子t种颜色 求有多少种项链和手镯 项链不可以翻转 手镯可以翻转 [分析] 要开始学置换了. ...
- Arif in Dhaka (First Love Part 2) UVA - 10294(Polya定理)
这题和POJ-1286一样 题意: 给出t种颜色的n颗珠子 (每种颜色的珠子个数无限制,但总数必须是n), 求能制作出项链和手镯的个数 注意手镯可以翻转和旋转 而 项练只能旋转 解析: 注意Poly ...
- UVa 10294 Arif in Dhaka (First Love Part 2) (Polya定理)
题意:给定 n 和 m 表示要制作一个项链和手镯,项链和手镯的区别就是手镯旋转和翻转都是相同的,而项链旋转都是相同的,而翻转是不同的,问你使用 n 个珠子和 m 种颜色可以制作多少种项链和手镯. 析: ...
- 【群论】polya定理
对Polya定理的个人认识 我们先来看一道经典题目: He's Circles(SGU 294) 有一个长度为N的环,上面写着“X”和“E”,问本质不同的环有多少个(不 ...
- [bzoj1488][HNOI2009]图的同构——Polya定理
题目大意 求两两互不同构的含n个点的简单图有多少种. 简单图是关联一对顶点的无向边不多于一条的不含自环的图. a图与b图被认为是同构的是指a图的顶点经过一定的重新标号以后,a图的顶点集和边集能完全与b ...
随机推荐
- NIO下_使用示例
一.分散与聚集 1.分散读取(Scattering Reads):将通道中的数据分散到多个缓冲区中 2.聚集写入(Gathering Writes):将多个缓冲区中的数据聚集到通道中 public v ...
- 使用echarts水球图
使用echarts水球图 官方实例中没有水球图样式,当我们需要用到水球图的时候需要下载echarts-liquidfill.js. 使用 在echarts之后引入 echarts-liquidfill ...
- hbuilder ios 打包失败,无法导入p12证书的解决方案
问题描述: 在profile文件和私钥证书通过hbuilder ios 打包成功过的前提下,突然遇到打包失败的问题,问题详情是无法导入p12证书. 探索过程: 本着遇到问题先自省的态度,重复打包了几次 ...
- hdfs文件按修改时间下载
应用于:对于不同用户创建的表目录,进行文件的下载,程序中执行hadoop cat命令 下载文件到本地,随后通过ftp传至目标服务器,并将hdfs文件目录的修改时间存入mysql中.每次修改前将mysq ...
- PHP基础点滴
PHP基础点滴 双冒号::的用法: 双冒号操作符即作用域限定操作符Scope Resolution Operator可以访问静态.const和类中重写的属性与方法. 伪类型(pseudo-types) ...
- go get报错unrecognized import path “golang.org/x/net/context”…
今天安装gin框架,首先下载gin,命令如下:go get github.com/mattn/go-sqlite3 结果报错: package golang.org/x/net/context: un ...
- 高性能javascript笔记
----------------------------------------------------------- 第一章 加载和执行 ------------------------------ ...
- Centos下_MysqL5.7在使用mysqldump命令备份数据库报错:mysqldump: Got error: 1449: The user specified as a definer ('fk_system'@'localhost') does not exist when using LOCK TABLES
在阿里云服务器增加一个shell脚本定时备份数据库脚本执行任务时,测试性的执行了备份命令,如下 [root@iZ2ze503xw2q1fftv5rhboZ mysql_bak]# /usr/local ...
- Android 文字过长TextView如何自动截断并显示成省略号
当用TextView来显示标题的时候,如果标题内容过长的话,我们不希望其换行显示,这时候我们需要其自动截断,超过的部分显示成省略号. 如下图所示,标题过长,自动换行了,显示不是很好看. 这时候我们需要 ...
- openstack-ocata-网络服务5
一. 网络服务概述 Networking(neutron),允许创建.插入接口设备,这些设备由其他的OpenStack服务管理.插件式的实现可以容纳不同的网络设备和软件,为OpenStack架构与部署 ...