假設世界盃**台上有n個座位,遊客們來到這裡自由佔位。一般情況下,乙個遊客首先考慮的座位肯定是兩邊都沒人的座位,其次考慮的是一邊沒人的座位,最後沒得考慮,只能隨便選一張兩邊都是人的座位。 假設有n個遊客依次到場佔位,每個人都是按照上述規則選擇自己的位子,求這n個遊客佔位的可能順序有多少種?
輸入描述:有多組測試資料,每組測試資料報括乙個正整數n(0輸出描述:對於每組資料,由於答案可能會很大,所以輸出:答案%1000000007
需要注意的是:觀眾來的順序是固定的,場地是環形的。
分析:第一批(前幾位)觀眾肯定選擇兩邊沒有人的位置,第二批(接下來)的觀眾肯定選擇一邊沒有人的,第三批(最後)只能選擇兩邊都有人的座位。因此我們可以按批次安排這n個人,即先安排第一批,再安排第二批,最後安排第三批。
定義:當座位為時,稱這四個座位為tb模組。每個tb模組間隔2個空座位。n為座位數,tb為tb模組個數,interval為間隔個數。
第一批:第一批觀眾入座之後需保證剩下的所有空座位至少一邊有人。
第二批:安排只有一邊沒有人的座位。易得這樣座位的個數與tb模組個數m的兩倍相同,則共有2m*m!種順序。
第三批:安排兩邊均有人的c個座位。顯然共有c!種順序。
我們按照tb模組的個數分情況討論,則對於每種情況共有:pi=(n*cinterval
tb*(interval-1)!)*(2tb*tb!)*((n-interval-tb)!)種情況順序。其中(n*cinterval
tb*(interval-1)!)為第一批,(2tb*tb!)為第二批,((n-interval-tb)!)為第三批。對於第一批來說共有interval個間隔,其中tb個tb模組,因此共有cinterval
tb種座位間隔安排方式,第乙個人已經選定位置,因此其他(interval-1)個人共有(interval-1)!種順序,因此第一批共有n*cinterval
tb*(interval-1)!種順序。對於第二批共有tb個tb模組,則共有2tb種安排順序,tb個人共有tb!個順序,因此共有2tb*tb!種順序。剩餘的第三批共有n-interval-tb個座位,因此共有(n-interval-tb)!種順序。
所有情況順序數之和即為最終結果。易得當n為奇數時,tb最小值為1;反之,tb最小值為0。
例1:假設有8個座位,
(1) 情況一:不存在tb模組。第乙個人共有8種選擇,當第乙個人選定後,其它3個座位也固定下來(如:第乙個人選擇位置1,則另外三個座位肯定是3, 5, 7),而接下來的這三個人可以有3!種順序。因此,可得第一批人第一種情況共8*c4
0*3!種順序。不存在tb模組即不存在第二批安排。最後需要安排的第三批座位數為4,共有4!種順序。由上可得情況一共有p1=8*3!*4!種順序。
(2) 情況二:存在2個tb模組。簡單分析可得不存在乙個tb模組的情況。此時間隔數為(8-3*2)/2+2=3個,即乙個間隔為1,2個間隔為2。當第乙個人固定後,間隔共有c3
2種分配方案,則該種情況共有8*c3
2*2!種情況。易得安排第二批人共有22*2!種順序,第三批人共有3!種順序。則情況二共有p2=(8*c3
2*2!)*(22*2!)*(3!)種順序。
(3) 情況三:存在4個tb模組。顯然對於8不可能,因此第一批人分情況處理完成。
綜上,當座位數為8時共有p1+p2種順序。
注意:上述中每種情況均增加兩個tb模組,直到達到tb模組的上界,則執行終止。
例2:假設有9個座位,
情況一:存在1個tb模組。間隔個數為(9-3*1)/2+1=4個,即3個間隔座位數為1,1個間隔座位數2。當第乙個人選定後間隔共有c4
1種分配方案,則該種共有9*c4
1*3!種順序。顯然安排第二批人共有21*1!種情況,第三批人共有4!種順序。則情況一共有p3=(9*c4
1*3!)*(21*1!)*(4!)種順序。
情況二:存在3個tb模組。間隔個數為(9-3*3)/2+3=3個,即0個間隔座位為1,3個間隔座位數為2。當第乙個人選定後間隔共有c3
3種分配方案,則第一批共有9*c3
3*2!中順序。易得,第二批人共有23*3!種順序,第三批人共有3!種順序。則情況二共有p4=(9*c3
3*2!)*(23*3!)*(3!)種順序。
情況三:顯然不存在5個tb模組。執行終止。
綜上,當座位數為9時共有p=p3+p4種順序。
由例1與例2可得,當座位數為奇數與偶數時,情況不同。相同的是每種情況遞增2個tb模組。
n為座位數,tb為tb模組個數,interval為間隔個數,num為所有觀眾的順序,則對於每一種情況均有pi=(n*cinterval
tb*(interval-1)!)*(2tb*tb!)*((n-interval-tb)!)。
偽**:
input:n
output:num
num = 0;
if n is odd
tb = 1;
else
tb = 0;
interval = (n-3*tb)/2 + tb;
while n ≥ 3*tb
p=(n*cinterval
tb*(interval-1)!)*(2tb*tb!)*((n-interval-tb)!);
num += p;
tb += 2;
interval--;
return num;
當只需保留餘數時,階乘的餘數可以在每次相乘之前取餘,即(a*b)%c =((a%c)*(b%c))%c。但cm
n%c如何求解?坐等高人指點迷津……
搞笑世界盃
有n張a類票 n張b類票,在兩張票都有的情況下,工作人員會以1 2的概率發票,否則就直接發僅存的那類票。現在請問最後兩張發出去的票是相同種類的概率是多少?n 2000 概率型dp 定義 dp i j 為還剩i張a類票,j張b類票,最後兩張相同的概率。易得出dp i 0 dp 0 i 1.0 i 2 ...
重溫世界盃
description 世界盃結束了,義大利人連本帶利的收回了法國人6年前欠他們的債,捧起了大力神盃,成就了4星義大利.世界盃雖然結束了,但是這界世界盃給我們還是留下許多值得回憶的東西.比如我們聽到了黃名嘴的3分鐘激情解說,我們懂得了原來可以向同乙個人出示3張黃牌,我們還看到了齊達內的頭不僅能頂球還...
世界盃紀錄之最
世界盃決賽階段進球最多的比賽 第5屆世界盃奧地利隊7 5擊敗瑞士隊,雙方共打進12個球。世界盃預賽階段乙個隊一場比賽進球最多的紀錄 1997年6月2日,在98年世界盃足球賽亞洲區預賽伊朗隊對馬爾地夫隊的比賽中,伊朗隊以17 0獲勝。世界盃預賽階段一場比賽進球最多的球員 7球,由伊朗隊的卡里姆 巴蓋里...