首页 > 其他 > 详细

Buy the tickets ( 卡特兰数大数、排列有顺序

时间:2020-04-02 22:35:28      阅读:95      评论:0      收藏:0      [点我收藏+]

# 题意

假设电影院只有一个售票处,而每张票的价格是50美元。购票队列由m + n人组成(m人每人只有50美元的钞票,n人每人只有100美元的钞票)。
现在,您的问题是要计算从第一人到最后一个人不会停止购买过程的排队方式的数量。
注意:最初,售票处没有钱。
当售票处没有50美元的钞票,但排队的第一人只有100美元的钞票时,将停止购买过程。

# 题解

卡特兰数字的推导,区别是n>m,并且每个n和m的内部的有顺序,

(C(n+m,n)-C(n+m,n+1)) * m! * n!

 1 import java.math.BigInteger;
 2 import java.util.Scanner;
 3 public class Main{
 4     public static void main(String[] args){
 5         int n,m;
 6         Scanner in=new Scanner(System.in);
 7         int cnt=0;
 8         while(in.hasNext()){
 9             cnt++;
10             n=in.nextInt();
11             m=in.nextInt();
12             BigInteger ans=BigInteger.ONE;
13             if(n==0&&m==0)break;
14             if(n<m) ans=BigInteger.ZERO;
15             else {
16                     for(int i=1;i<=n+m;i++){
17                         ans=ans.multiply(BigInteger.valueOf(i));
18                     }
19                 int x=(n-m+1);
20                 int y=(n+1);
21                 ans=ans.multiply(BigInteger.valueOf(x));
22                 ans=ans.divide(BigInteger.valueOf(y));
23             }
24             System.out.println("Test #"+cnt+":");
25             System.out.println(ans);
26         }
27     }
28 }

 

Buy the tickets ( 卡特兰数大数、排列有顺序

原文:https://www.cnblogs.com/hhyx/p/12622735.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!