UVA10294项链和手镯(等价类计数问题)
题意:
给你一串珠子(连接成了一个环),共有n个珠子组成,你有t种颜色,现在你来给这个珠子染色,问染成项链有多少种方法?染成手镯有多少种方法?在项链里,经过顺时针旋转后相同的算一个,在手镯里,经过顺时针旋转或者沿着对称轴兑换后一样的算一个。
思路:
比较典型的等价类计数问题,我们定义两个变量,a是旋转的总个数,b是翻转的总个数,那么根据Burnside和Polya定理,a = C[0] + C[1] + C[2] +..+C[n-1];
C[i]表示的是顺时针移动i个后的种类数,C[i] = t^w,t是颜色种类,w是循环节个数,在这个题目里,旋转是的循环节个数为gcd(i ,n);至于为什么可以自己想,想不通的话可以想想杭电上那个切蛋糕的题目,那么C[i] = t^gcd(i ,n)这样就能求出各个C[i]然后求出a,此时的相连的答案已经出来了,就是a/n,那么b呢?b可以分情况讨论,如果n是奇数那么对角线一共有n条,每次可以分出来(n+1)个循环节,那么b = n * t ^ ((n + 1)/2)如果n是偶数的话有两种情况,不穿过任何点的为 n/2*t(n/2) 穿过两个点的对角线为n/2*(n/2+1)那么此时的b=n/2*(t^(n/2) + t^(n/2+1)),那么手镯的种类为(a+b)/(n*2).
这里在解释下上面的那两个定理,那两个定理是求等价类计数问题的常用定理,大体意思就是说种类数等于所有可能置换方法的方法数的平均数,而每一个置换方法的个数等于颜色个数的循环节次幂,循环节就是置换里面的那个循环节。
#include<stdio.h>
long long gcd(long long a ,long long b)
{
return a % b == 0 ? b : gcd(b ,a % b);
}
int main ()
{
long long pow[60];
long long n ,t ,i;
long long a ,b;
while(~scanf("%lld %lld" ,&n ,&t))
{
pow[0] = 1;
for(i = 1 ;i <= n ;i ++)
pow[i] = pow[i-1] * t;
a = 0;
for(i = 0 ;i < n ;i ++)
a += pow[gcd(i ,n)];
if(n & 1) b = n * pow[(n+1)/2];
else b = n / 2 * pow[n/2] + n / 2 * pow[n/2 + 1];
printf("%lld %lld\n" ,a / n ,(a + b) / n / 2);
}
return 0;
}
UVA10294项链和手镯(等价类计数问题)相关推荐
- 置换群,Polya引理和burnside引理(等价类计数问题)
参考文章: 等价类计数问题 Burnside引理&Pólya定理 Burnside引理与Polya定理 置换群和Burnside引理,Polya定理 概念引入: 离散数学应该学过置换群的相关概 ...
- linux龙芯自动挂载u盘,Windows Subsystem for Linux (WSL)挂载移动硬盘U盘
WSL想通过移动硬盘处理一些数据,结果进去了无法发现移动硬盘,于是搜了好久也没有一个正确的解决办法,终于找到一个,现在贡献出来与大家共享. WSL比起linux挂载硬盘简单一些.而且windows本身 ...
- P1446 [HNOI2008]Cards
P1446 [HNOI2008]Cards 题意: 有n张牌,染三种颜色,每种颜色规定数目,给出m种不同的洗牌方法.两种染色方法相同当且仅当其中一种可以通过任意的洗牌法(即可以使用多种洗牌法,而每种方 ...
- 传奇霸业维护服务器,37传奇霸业8月18日部分区服维护计划
亲爱的玩家: 您好,为保证服务器稳定运营,优化游戏体验,<传奇霸业>新版本"炼狱魔域"将代替旧版本"超霸传奇"继续向各大玩家提供游戏服务, 我们将在 ...
- 是什么牌子_水晶项链什么牌子好
阅读本文前,请您先点击上面的蓝色字体,再点击"关注",这样您就可以免费收到最新内容了.每天都有分享,完全是免费订阅,请放心关注! ...
- 潘多拉_最新Pandora潘多拉美国官网海淘攻略
潘多拉相信没有女生是不喜欢的,Pandora的串珠和首饰一直是少女心的存在,BlingBling闪亮亮充满着幻想的气息.Pandora总是有一种蜜汁魔力,每次看见打折的款式总是忍不住要剁手!买回来和之 ...
- 2022茶艺师(初级)操作证考试题库及在线模拟考试
题库来源:安全生产模拟考试一点通公众号小程序 2022茶艺师(初级)考试题模拟考试题库为茶艺师(初级)国家题库考前押题密卷!2022茶艺师(初级)操作证考试题库及在线模拟考试依据茶艺师(初级)最新教材 ...
- 玩家参与装备熔炼顺序是怎样进行
对于普通玩家而言,想要对活动中使用的装备,加入熔炼行列时,首先需要做到的就是对于武器进行相应升级,参与活动的玩家,能够获得武器攻击指数会是效果非常高的.加入熔炼之后,玩家就会提升相对百分比打出的伤害, ...
- linux 进程无法启动,linux6.*无法正常启动has进程解决方案
1. 数据库安装成功之后:发现ohasd进程存在异常: [root@oracle234 ~]# su - grid [grid@oracle234 ~]$ ps -ef| grep ohasd gri ...
最新文章
- 基于Cobbler实现多版本系统批量部署
- MongoDB基础知识总结
- java java.lang.enum_源码阅读-java基础-java.lang.Enum
- Python笔记-使用sqlalchemy根据类创建数据库表
- errcode: 41001, errmsg: access_token missing hint: [w.ILza05728877!]
- python类不接受任何参数_python中提示class不接受参数,为什么?
- glide源码中包含了那种设计模式_源码中的设计模式-单例模式
- 什么时候开始论文查重?
- php中文网怎么修改头像,thinkphp 头像上传在线剪切编辑问题 (使用美图秀秀头像编辑器组件)...
- fanuc机器人自动程序前怎么回原点_FANUC机器人宏程序自动运行的方法及启动宏程序的步骤教程...
- 论文阅读:Gibberish, Assistant, or Master? Using Tweets Linking to News for Extractive Single-Document Su
- 计算机管理员和用户名区别,Administrator记不住?教你自定义管理员账户名称
- 叠氮试剂79598-53-1,6-Azidohexanoic Acid,6-叠氮基己酸,末端羧酸可与伯胺基反应
- Nginx 之实现原理
- PyTorch 学习之Ubuntu16.04 下安装 PyTorch(conda与pip两种方式安装)
- 软考高级,考网规还是考项管?
- android自定义发彩信实现(不调用系统发彩信界面)
- 一分钟教你如何识别图片文字
- 海康 nvr获取视频流
- Arduino - I2C通信协议(附.mlx90614红外温度传感器)