杭電2068 RPG的錯排

2021-07-10 13:43:12 字數 1345 閱讀 3646

problem description

今年暑假杭電acm集訓隊第一次組成女生隊,其中有一隊叫rpg,但做為集訓隊成員之一的野駱駝竟然不知道rpg三個人具體是誰誰。rpg給他機會讓他猜猜,第一次猜:r是公主,p是草兒,g是月野兔;第二次猜:r是草兒,p是月野兔,g是公主;第三次猜:r是草兒,p是公主,g是月野兔;......可憐的野駱駝第六次終於把rpg分清楚了。由於rpg的帶動,做acm的女生越來越多,我們的野駱駝想都知道她們,可現在有n多人,他要猜的次數可就多了,為了不為難野駱駝,女生們只要求他答對一半或以上就算過關,請問有多少組答案能使他順利過關。

input

輸入的資料裡有多個case,每個case包括乙個n,代表有幾個女生,(n<=25), n = 0輸入結束。

sample input12

0sample output11

一看題目就知道是錯排題目;並且是部分錯排;

1;因為要用到錯排所以先把全錯排**提出來;

h[1] = 0;

h[2]= 1;

for(i= 3; i < 15; i++)

2;因為是部分錯排;則可以想到在n個數中選出m個人然後剩餘的人進行全錯排;因此要把求組合**打出來;

long long int c(int n, int m)//組合數c(n,m);

return ans / temp; }

3;題目意思;女生們只要求他答對一半或以上就算過關,請問有多少組答案能使他順利過關。

意思就是從n個中取出2/n到n取出然後剩餘的進行錯排;

;因此要把所有成立的和求出;貼出**;

for(i = 2; i<= n/2; i++);

h[1]= 0;

h[2]= 1;

for(i= 3; i < 15; i++){//算錯排數

h[i]= (i-1)*(h[i-1]+h[i-2]);

while(scanf("%d",&n)!= eof && n!=0){

zl= 1;

for(i= 2; i <= n/2; i++){

zl+= c(n,i)*h[i];

printf("%lld\n",zl);

return0 ;

long long int c(int n, int m)//組合數;

long long int  ans = 1, temp = 1;

for(int i = 1; i <= m; i++)

ans *= (n - i + 1);

temp *= i;

return ans / temp;

hdu 2068 RPG的錯排(組合)

hdu 2068 rpg的錯排 description 今年暑假杭電acm集訓隊第一次組成女生隊,其中有一隊叫rpg,但做為集訓隊成員之一的野駱駝竟然不知道rpg三個人具體是誰誰。rpg給他機會讓他猜猜,第一次猜 r是公主,p是草兒,g是月野兔 第二次猜 r是草兒,p是月野兔,g是公主 第三次猜 r...

hdu 2068 RPG的錯排 錯排)

problem description 今年暑假杭電acm集訓隊第一次組成女生隊,其中有一隊叫rpg,但做為集訓隊成員之一的野駱駝竟然不知道rpg三個人具體是誰誰。rpg給他機會讓他猜猜,第一次猜 r是公主,p是草兒,g是月野兔 第二次猜 r是草兒,p是月野兔,g是公主 第三次猜 r是草兒,p是公主...

HDU 2068 RPG錯排 錯排公式

1.題意 1到n的序列的排列中,元素位置與元素值相對應的情況 值為i的元素在某個排列中正好排在第i個位置 大於等於序列規模一半的情況,有多少個?2.輸入輸出 每組資料乙個數,n,規定輸入以0結尾 3.分析 原題意換句話說,就是針對1到n的全排列,錯排元素的個數小於等於n的情況有多少 那麼,輸出即為 ...