【2019华为笔试】召唤师的技能——圆排列,翻转和项链排列

33 篇文章 0 订阅
24 篇文章 1 订阅

题目描述:

dota游戏里面,召唤师可以控制冰雷火三种元素,并通过元素组合产生新的技能。现在我们修改了张新的地图, 地图中他能够控制n种元素, 并且将m个元素围成一个圈组成一 个新技能(这m个元素通过旋转或反转,算作重复,如123、231、312、 321、213、 132都算重复),那么召唤师能组合多少技能(20000>=n>=1 ,1<=m<=10000),由于结果可能很大,请将结果对000000007取余

正解传送门:

【Polay定理总结】【2019华为笔试】【普通涂色问题 组合数学】召唤师的技能——圆排列,翻转和项链排列

召唤师·卡尔(Polya定理)

下面的别看 = =




















































分析:
根据题意,这是个圆排列去除圆的翻转排列
我先解释下圆排列
例子1:
[1]参考网址:例子来自知乎
圆排列的定义为:有一组元素,将其排成一个圆,这种排列叫做圆排列或项链排列

  • 有五个小朋友,手拉手排成一个圆做游戏,求不同的排法数?

一般有两个思路:

  • 假如五个小朋友手牵手变成圆排列,任意两个相邻的小朋友手松开就变成了一个直排列,即,任意一种圆排列对应五个不同的直线排列。五个小朋友站成一排有5!种方法,则手拉手有5!/5=4!种方法。
  • 假如五个小朋友手牵手变成圆排列,五人按顺序移动一个位置其实是一种圆排列。所以固定其中一人,剩下四人任意排,有4!种方法。
一般地,有m个元素作圆排列,其计算公式为(m-1)!

例子2:
有5对夫妇和A、B共12人参加一场婚宴,他们被安排在一张12个座位的圆桌就餐,要求每对夫妻都相邻坐,A、B不相邻,甲、乙太太是闺蜜又要相邻坐,如果旋转之后相同算一种坐法,一共有多少种安排方法?

思路:
固定甲、乙太太两个人,有2种方法:甲乙或乙甲;甲、乙先生位置就定下来
剩下三对夫妻捆绑3!每对可以左右互换小排列2^3
A、B在四个空里插空,A(4,2)
综上:2x3!x2^3xA(4,2)=1152

比如: 123 的圆排列有:1 2 3 、3 1 2、2 3 1相同,
又有翻转排列有:321 的圆排列有:3 2 1、1 3 2、2 1 3。
123的翻转排列等价于123的圆排列,所以,123 的翻转圆排列数目为1.
本来只算圆排列,有1 2 3 、3 2 1两种,现在只有2/2=1种

从n个不同元素中不重复地取出m(1≤m≤n)个元素在一个圆周上,叫做这n个不同元素的圆排列。如果一个m-圆排列旋转可以得到另一个m-圆排列,则认为这两个圆排列相同。
n个不同元素的m-圆排列个数N为: 在这里插入图片描述
特别地,当m=n时,n个不同元素作成的圆排列总数N为:
在这里插入图片描述

故这里根据题意,圆排列的翻转排列必然不含在其圆排列中。故

翻转圆排列=圆排列数/2

注意到这里,每次都一定要选出m个元素来进行排列。
所以这里先对选出的元素,比如说x个不同的元素(出现一次),y个相同的元素(出现多次)进行圆排列,
我们知道x+y=n,且m=y*(元素重复次数)+x
根据上面的公式:

N=(n-1)!

思考:

由于地图中他能够控制n种元素, 并且将m个元素围成一个圈组成一 个新技能(这m个元素通过旋转或反转,算作重复,如123、231、312、 321、213、 132都算重复)
所以这里需要先从n个元素选出m个,也就是 C m n = A m n n ! = m ! n ! ( m − n ) ! C_m^n=\frac{A_m^n}{n!}=\frac{m!}{n!(m-n)!} Cmn=n!Amn=n!(mn)!m! 然后乘上 ( m − 1 ) ! (m-1)! (m1)!

根据公式写代码即可。
种 数 = m ! ( m − 1 ) ! n ! ( m − n ) ! 种数=\frac{m!(m-1)!}{n!(m-n)!} =n!(mn)!m!(m1)!

拓展

当圆排列里含有重复元素怎么办:

原文:https://www.cnblogs.com/guhejian/p/5882845.html

有关圆排列问题——m个相同的元素和n个不同的元素的圆排列解法。
根据圆排列规则,先将 n + m n+m n+m 个元素进行线排列有 ( m + n ) ! ( m ! ) \frac{(m+n)!}{(m!)} (m!)m+n)种;又每 m + n m+n m+n 种线排列对应1种圆排列;
所以圆排列的种数为 ( m + n − 1 ) ! / ( m ! ) (m+n-1)!/(m!) m+n1/(m!)种;
注意:
圆排列中,经旋转可以重合的视为一种

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值