球賽門票的售票處規定每位購票者限購一張門票,且每張門票售價50元。購票者中有m位手持50元錢幣,另有n人手持100元。假設售票處開始售票時無零錢。問這m+n人有幾種排隊方式可使售票處不致出現找不出錢的局面。
對給定的m,n(0<=m,n<=5000),計算出排隊方式總數。輸入資料第1行為測試資料的個數t,餘下的t行每行有兩個整數m和n。對每一組測試資料輸出方案數。
33 22 0
1 1
51
這道題我是無解了 通過遞迴肯定死啊 高精度問題 最後康哥出馬搞定 先貼出來 佔位
#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 看做是乙個右括號,那麼這道題就轉化成了 求合法括號序列的方案數 相信對...