球迷购票问题

题目描述

球赛门票的售票处规定每位购票者限购一张门票,且每张门票售价50元。购票者中有m位手持50元钱币,另有n人手持100元。假设售票处开始售票时无零钱。问这m+n人有几种排队方式可使售票处不致出现找不出钱的局面。

对给定的m,n(0<=m,n<=5000),计算出排队方式总数。

输入格式

两个整数m和n。

输出格式

输出方案数.

 

 

 

 

递推了好长时间,不得不看题解,然后向蔡佳文借了一本数学《奥赛经典》,学到一个公式。还用到了高精度除法。

C(m+n,n)-C(m+n,n-1);

 1 #include<iostream>
 2 using namespace std;
 3 
 4 int m,n,a[9001];
 5 
 6 void Mul(int x){
 7      for(int i=0;i<9000;++i)
 8      a[i]*=x;
 9      
10      for(int i=0;i<9000;++i)
11      if(a[i]>10)
12      {
13        a[i+1]+=a[i]/10;
14        a[i]%=10;
15                    }
16      }
17 
18 void Div(int x){
19      int now=0;
20      for(int i=9000;i>=0;--i)
21      {
22        now=10*now+a[i];
23        a[i]=now/x;
24        now%=x;
25               }
26      }
27 
28 int main()
29 {
30     cin>>m>>n;
31     
32     if(n>m) {cout<<0<<endl;return 0;}
33     
34     a[0]=1;
35     
36     swap(n,m);
37     for(int i=1;i<=m;++i)
38     {
39       Mul(m+n-i+1);
40       Div(i);
41             }
42     
43     Mul(n-m+1);
44     Div(n+1);
45     
46     int i=9000;
47     while(a[i]==0) i--;
48     while(i>=0) cout<<a[i--];
49     
50     cout<<endl;
51   // system("pause");
52     return 0;
53 
54     }

 

转载于:https://www.cnblogs.com/noip/archive/2012/08/25/2656909.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值