题意:
      给你一串珠子(连接成了一个环),共有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项链和手镯(等价类计数问题)相关推荐

  1. 置换群,Polya引理和burnside引理(等价类计数问题)

    参考文章: 等价类计数问题 Burnside引理&Pólya定理 Burnside引理与Polya定理 置换群和Burnside引理,Polya定理 概念引入: 离散数学应该学过置换群的相关概 ...

  2. linux龙芯自动挂载u盘,Windows Subsystem for Linux (WSL)挂载移动硬盘U盘

    WSL想通过移动硬盘处理一些数据,结果进去了无法发现移动硬盘,于是搜了好久也没有一个正确的解决办法,终于找到一个,现在贡献出来与大家共享. WSL比起linux挂载硬盘简单一些.而且windows本身 ...

  3. P1446 [HNOI2008]Cards

    P1446 [HNOI2008]Cards 题意: 有n张牌,染三种颜色,每种颜色规定数目,给出m种不同的洗牌方法.两种染色方法相同当且仅当其中一种可以通过任意的洗牌法(即可以使用多种洗牌法,而每种方 ...

  4. 传奇霸业维护服务器,37传奇霸业8月18日部分区服维护计划

    亲爱的玩家: 您好,为保证服务器稳定运营,优化游戏体验,<传奇霸业>新版本"炼狱魔域"将代替旧版本"超霸传奇"继续向各大玩家提供游戏服务, 我们将在 ...

  5. 是什么牌子_水晶项链什么牌子好

    阅读本文前,请您先点击上面的蓝色字体,再点击"关注",这样您就可以免费收到最新内容了.每天都有分享,完全是免费订阅,请放心关注!                          ...

  6. 潘多拉_最新Pandora潘多拉美国官网海淘攻略

    潘多拉相信没有女生是不喜欢的,Pandora的串珠和首饰一直是少女心的存在,BlingBling闪亮亮充满着幻想的气息.Pandora总是有一种蜜汁魔力,每次看见打折的款式总是忍不住要剁手!买回来和之 ...

  7. 2022茶艺师(初级)操作证考试题库及在线模拟考试

    题库来源:安全生产模拟考试一点通公众号小程序 2022茶艺师(初级)考试题模拟考试题库为茶艺师(初级)国家题库考前押题密卷!2022茶艺师(初级)操作证考试题库及在线模拟考试依据茶艺师(初级)最新教材 ...

  8. 玩家参与装备熔炼顺序是怎样进行

    对于普通玩家而言,想要对活动中使用的装备,加入熔炼行列时,首先需要做到的就是对于武器进行相应升级,参与活动的玩家,能够获得武器攻击指数会是效果非常高的.加入熔炼之后,玩家就会提升相对百分比打出的伤害, ...

  9. linux 进程无法启动,linux6.*无法正常启动has进程解决方案

    1. 数据库安装成功之后:发现ohasd进程存在异常: [root@oracle234 ~]# su - grid [grid@oracle234 ~]$ ps -ef| grep ohasd gri ...

最新文章

  1. 基于Cobbler实现多版本系统批量部署
  2. MongoDB基础知识总结
  3. java java.lang.enum_源码阅读-java基础-java.lang.Enum
  4. Python笔记-使用sqlalchemy根据类创建数据库表
  5. errcode: 41001, errmsg: access_token missing hint: [w.ILza05728877!]
  6. python类不接受任何参数_python中提示class不接受参数,为什么?
  7. glide源码中包含了那种设计模式_源码中的设计模式-单例模式
  8. 什么时候开始论文查重?
  9. php中文网怎么修改头像,thinkphp 头像上传在线剪切编辑问题 (使用美图秀秀头像编辑器组件)...
  10. fanuc机器人自动程序前怎么回原点_FANUC机器人宏程序自动运行的方法及启动宏程序的步骤教程...
  11. 论文阅读:Gibberish, Assistant, or Master? Using Tweets Linking to News for Extractive Single-Document Su
  12. 计算机管理员和用户名区别,Administrator记不住?教你自定义管理员账户名称
  13. 叠氮试剂79598-53-1,6-Azidohexanoic Acid,6-叠氮基己酸,末端羧酸可与伯胺基反应
  14. Nginx 之实现原理
  15. PyTorch 学习之Ubuntu16.04 下安装 PyTorch(conda与pip两种方式安装)
  16. 软考高级,考网规还是考项管?
  17. android自定义发彩信实现(不调用系统发彩信界面)
  18. 一分钟教你如何识别图片文字
  19. 海康 nvr获取视频流
  20. Arduino - I2C通信协议(附.mlx90614红外温度传感器)

热门文章

  1. 图形验证码最佳攻略2
  2. linux标准库的问题
  3. js中substring和substr的用法
  4. 黑马lavarel教程---5、模型操作(AR模式)
  5. 一本通1655数三角形
  6. selenium代码练习
  7. .net core 项目文件结构浅析
  8. Swift学习------常量与变量
  9. how to use the mathmatical constant e in conjunction with a vector
  10. 用VB.net开发.NET Micro Framework