题意:

      给你一串珠子(连接成了一个环),共有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. UVa 10294 项链和手镯(polya)

    https://vjudge.net/problem/UVA-10294 题意: 手镯可以翻转,但项链不可以.输入n和t,输出用t种颜色的n颗珠子能制作成的项链和手镯的个数. 思路: 经典等价类计数问 ...

  2. 项链与手镯Uva 10294——Polya定理

    题意 项链和手镯都是由若干珠子串成的环形首饰,区别在于手环可以翻转,但项链不可以. 输入整数 $n$ 和 $t$,输出用 $t$ 中颜色 $n$ 颗珠子能制作成的项链和手镯的个数.($1\leq n ...

  3. UVA 10294 项链与手镯 (置换)

    Burnside引理:对于一个置换\(f\), 若一个着色方案\(s\)经过置换后不变,称\(s\)为\(f\)的不动点.将\(f\)的不动点数目记为\(C(f)\), 则可以证明等价类数目为\(C( ...

  4. 置换群、Burnside引理与等价类计数问题

    置换群.Burnside引理与等价类计数问题 标签: 置换群 Burnside引理 置换 说说我对置换的理解,其实就是把一个排列变成另外一个排列.简单来说就是一一映射.而置换群就是置换的集合. 比如\ ...

  5. 等价类计数问题(Polya定理和burnside引理)

    零.约定: (置换等名词会在前置知识中有解释) \(1.\)在本文中,题目要求的染色方案等统称为"元素". \(2.\)两个元素严格相等我们记做"\(=\)", ...

  6. UVA 10294 等价类计数

    题目大意: 项链和手镯都是若干珠子穿成的环形首饰,手镯可以旋转和翻转,但项链只能旋转,给n个珠子,t种颜色,求最后能形成的手镯,项链的数量 这里根据等价类计数的polya定理求解 对于一个置换f,若一 ...

  7. [Uva10294]Arif in Dhaka

    [Uva10294]Arif in Dhaka 标签: 置换 Burnside引理 题目链接 题意 有很多个珠子穿成环形首饰,手镯可以翻转和旋转,项链只能旋转.(翻转过的手镯相同,而项链不同) 有n个 ...

  8. UVA10294 Arif in Dhaka (群论,Polya定理)

    UVA10294 Arif in Dhaka (群论,Polya定理) 题意 : 给你一个长为\(n\)的项链和手镯,每个珠子有\(m\)种颜色. 两个手镯定义为相同,即它们通过翻转和旋转得到一样的手 ...

  9. UVA10294 Arif in Dhaka (First Love Part 2)

    题意 PDF 分析 用n颗宝石串成项链和手镯, 每颗宝石的颜色可以t种颜色中的一种,当A类项链经过旋转得B类项链时,A和B属于一类项链, 而手镯不仅可以旋转还可以翻转,当A类手镯经过翻转得得到B类手镯 ...

随机推荐

  1. docker在vulhub中的使用命令合集

          (1)docker  ps(查询 docker 进程的所有容器) (2)docker  info(查看docker详细信息) (3)service docker start(启动docke ...

  2. javascript 最权威的知识点总结

    JavaScript中如何检测一个变量是一个String类型?请写出函数实现typeof(obj) === "string"typeof obj === "string& ...

  3. 20个最有用的Python数据科学库

    核心库与统计 1. NumPy(提交:17911,贡献者:641) 一般我们会将科学领域的库作为清单打头,NumPy 是该领域的主要软件库之一.它旨在处理大型的多维数组和矩阵,并提供了很多高级的数学函 ...

  4. Redis不是一直号称单线程效率也很高吗,为什么又采用多线程了?

    Redis是目前广为人知的一个内存数据库,在各个场景中都有着非常丰富的应用,前段时间Redis推出了6.0的版本,在新版本中采用了多线程模型. 因为我们公司使用的内存数据库是自研的,按理说我对Redi ...

  5. (2)MySQL进阶篇SQL优化(show status、explain分析)

    1.概述 在应用系统开发过程中,由于初期数据量小,开发人员写SQL语句时更重视功能上的实现,但是当应用系统正式上线后,随着生产数据量的急剧增长,很多SQL语句开始逐渐显露出性能问题,对生产环境的影响也 ...

  6. css行高

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  7. MVC中"删除"按钮无法实现

    出现原因:MVC视图中定义了空的模板页 解决办法:删除模板页 或 改成定义页面标题都可以

  8. 文本相似性计算--MinHash和LSH算法

    给定N个集合,从中找到相似的集合对,如何实现呢?直观的方法是比较任意两个集合.那么可以十分精确的找到每一对相似的集合,但是时间复杂度是O(n2).此外,假如,N个集合中只有少数几对集合相似,绝大多数集 ...

  9. 攻防世界 reverse Replace

    Replace 湖湘杯2018 查壳upx,手动脱壳,修复IAT,去掉重定向便可以运行. ida查看,流程清晰.关键函数check_E51090. int __cdecl main(int argc, ...

  10. (一)SpringBoot启动过程的分析-启动流程概览

    -- 以下内容均基于2.1.8.RELEASE版本 通过粗粒度的分析SpringBoot启动过程中执行的主要操作,可以很容易划分它的大流程,每个流程只关注重要操作为后续深入学习建立一个大纲. 官方示例 ...