zoukankan      html  css  js  c++  java
  • 【BigInteger】 Buy the Ticket

    传送门

    题意

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

    数据范围

    (1leq n,mleq 100)

    题解

    • (m < n) 时,会有中断所有人不能完成,所以为 0
    • 卡特兰数字的推导,区别是 (ngeq m),每个 (n)(m) 的内部有顺序,所以要额外乘(n! imes m !)

    [(C_{n+m}^{n}-C_{n+m}^{n+1}) imes m! imes n! ]

    Code

    import java.math.BigInteger;
    import java.util.Scanner;
    public class Main{
        public static void main(String[] args){
            int n,m;
            Scanner in=new Scanner(System.in);
            int cnt=0;
            while(in.hasNext()){
                cnt++;
                n=in.nextInt();
                m=in.nextInt();
                BigInteger ans=BigInteger.ONE;
                if(n==0&&m==0)break;
                if(n<m) ans=BigInteger.ZERO;
                else {
                        for(int i=1;i<=n+m;i++){
                            ans=ans.multiply(BigInteger.valueOf(i));
                        }
                    int x=(n-m+1);
                    int y=(n+1);
                    ans=ans.multiply(BigInteger.valueOf(x));
                    ans=ans.divide(BigInteger.valueOf(y));
                }
                System.out.println("Test #"+cnt+":");
                System.out.println(ans);
            }
        }
    }
    
  • 相关阅读:
    软件构造实训经验总结
    Python Numpy data-type dtype 自定义数据类型
    numpy练习100题--错题本
    pytorch tensor 调换矩阵行的顺序
    Pytorch-Tensor基本操作
    torch.randonperm()
    jupyter找不到conda的虚拟环境
    Windows下tar.gz tar.bz2的安装方法
    ubuntu常用的命令行操作命令
    神经网络权重初始化
  • 原文地址:https://www.cnblogs.com/hhyx/p/14401489.html
Copyright © 2011-2022 走看看