【2019华为笔试】召唤师的技能——圆排列,翻转和项链排列
題目描述:
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!種方法。
例子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種元素, 并且將m個元素圍成一個圈組成一 個新技能(這m個元素通過旋轉或反轉,算作重復,如123、231、312、 321、213、 132都算重復)
所以這里需要先從n個元素選出m個,也就是Cmn=Amnn!=m!n!(m?n)!C_m^n=\frac{A_m^n}{n!}=\frac{m!}{n!(m-n)!}Cmn?=n!Amn??=n!(m?n)!m!? 然后乘上(m?1)!(m-1)!(m?1)!
根據公式寫代碼即可。
種數=m!(m?1)!n!(m?n)!種數=\frac{m!(m-1)!}{n!(m-n)!}種數=n!(m?n)!m!(m?1)!?
拓展
當圓排列里含有重復元素怎么辦:
原文:https://www.cnblogs.com/guhejian/p/5882845.html
有關圓排列問題——m個相同的元素和n個不同的元素的圓排列解法。
根據圓排列規則,先將 n+mn+mn+m 個元素進行線排列有(m+n)!(m!)\frac{(m+n)!}{(m!)}(m!)(m+n)!?種;又每m+nm+nm+n 種線排列對應1種圓排列;
所以圓排列的種數為(m+n?1)!/(m!)(m+n-1)!/(m!)(m+n?1)!/(m!)種;
注意:
圓排列中,經旋轉可以重合的視為一種;
總結
以上是生活随笔為你收集整理的【2019华为笔试】召唤师的技能——圆排列,翻转和项链排列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python用蒙特卡罗方法计算圆周率近似
- 下一篇: JavaGUI 简易贪吃蛇代码详解+图片