1247 球迷購票問題

2021-05-04 16:28:21 字數 1554 閱讀 3576

球賽門票的售票處規定每位購票者限購一張門票,且每張門票售價50元。購票者中有m位手持50元錢幣,另有n人手持100元。假設售票處開始售票時無零錢。問這m+n人有幾種排隊方式可使售票處不致出現找不出錢的局面。

對給定的m,n(0<=m,n<=5000),計算出排隊方式總數。輸入資料第1行為測試資料的個數t,餘下的t行每行有兩個整數m和n。對每一組測試資料輸出方案數。

3

3 22 0

1 1

5

1

這道題我是無解了 通過遞迴肯定死啊 高精度問題 最後康哥出馬搞定  先貼出來 佔位

#include 

#include

int a[100005];

void output(int x);

void process(int m, int n)  /(m-n+1)/(m+1)c(m+n,m)

int mm=m+n;

int x=(int)log(mm)*mm/15+2;

int i,j,k,sign;

a[0]=m-n+1;

for(i=1;ia[i]=0;

while(mm>n)

sign=0;

for(i=0;ik=a[i]*mm+sign;

a[i]=k%100000;

sign=k/100000;

mm--;

m++;

while(m>1)

sign=0;

for(i=x;i>=0;i--)

k=sign*100000+a[i];

a[i]=k/m;

sign=k%m;

m--;

output(x);

void output(int x)

int i,j;

for(i=x;i>=0;i--)

if(a[i]!=0)

break;

printf("%d",a[i]);

i--;

for(;i>=0;i--)

if(a[i]<=9)

printf("0000%d",a[i]);

else if(a[i]<=99)

printf("000%d",a[i]);

else if(a[i]<=999)

printf("00%d",a[i]);

else if(a[i]<=9999)

printf("0%d",a[i]);

else

printf("%d",a[i]);

printf("/n");

int main(void)

int m,n,t;

scanf("%d",&t);

while(t--)

scanf("%d%d",&m,&n);

if(mprintf("0/n");

else if(n==0)

printf("1/n");

else

process(m,n);

return 0;

}

球迷購票問題

球賽門票的售票處規定每位購票者限購一張門票,且每張門票售價50元。購票者中有m位手持50元錢幣,另有n人手持100元。假設售票處開始售票時無零錢。問這m n人有幾種排隊方式可使售票處不致出現找不出錢的局面。對給定的m,n 0 m,n 5000 計算出排隊方式總數。兩個整數m和n。輸出方案數.遞推了好...

題解 球迷購票問題 C

題目背景 盛況空前的足球賽即將舉行。球賽門票售票處排起了球迷購票長龍。按售票處規定,每位購票者限購一張門票,且每張票售價為50元。在排成長龍的球迷中有n個人手持面值50元的錢幣,另有n個人手持面值100元的錢幣。假設售票處在開始售票時沒有零錢。試問這2n個球迷有多少種排隊方式可使售票處不致出現找不出...

P1754 球迷購票問題

原題鏈結 乙個長度為 2n 的括號序列由 n 個左括號和 n 個右括號組成,問有多少種合法方案 顯然對於任意時刻,要是能找開 b,那麼之前一定有乙個 a 給他提供了一張 50 的 money,如果將 a 看做是乙個左括號,將 b 看做是乙個右括號,那麼這道題就轉化成了 求合法括號序列的方案數 相信對...