博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu1133 Buy the Ticket (卡兰特数应用+java大数)
阅读量:7200 次
发布时间:2019-06-29

本文共 882 字,大约阅读时间需要 2 分钟。

题目链接:

pid=1133

【题意】

电影票50块一张

有m个人手里正好有50块,n个人手里正好有100块,售票厅開始没有钱。问,有多少种排队的方式,能够让每一个人都买上票。

(假设售票厅没有50块零钱,则持有100块的人买不了票)

【分析】

显然。当m<n的时候,有0种排列方式。

当m>=n的时候:

用0。代表手里仅仅有50块的人,1,代表手里仅仅有100块的。

则0110100 这样的情况不能满足条件(到第三个人就买不了)

我们把包含第三个人及他之前的人 翻转 (1->0,  0->1)

1000100 出现了这个序列; 

0110100   有 4个0,3个1    1000100  有5个0 ,2个1

每个不能满足的情况都相应这样一个序列 所以 不能满足的条件的情况共同拥有

C(m+1,m+n);

我们计算公式就是:合法的排列方式=全部排列方式-非法排列方式

于是就有了F(N)=($$C_{m+n}^{m}$$-$$C_{m+n}^{m+1}$$)*m!*n!  ;

然后再化简一下;

F(N) =(m+n)!

*(m-n+1)/(m+1)。

由于数据过大,所以用了JAVA大数来解决

【代码】

import java.util.*;import java.math.BigInteger;public class Main{    public static void main(String[] args){            int a,b;            Scanner in=new Scanner(System.in);            int cnt=0;            while(in.hasNext()){                cnt++;                a=in.nextInt();                b=in.nextInt();                BigInteger ans=BigInteger.ONE;                if(a==0&&b==0)break;                if(a

转载地址:http://lkzum.baihongyu.com/

你可能感兴趣的文章
blog推荐 - 左岸读书
查看>>
LoadRunner 技巧之 脚本设计
查看>>
C#控制台的输入和输出-Console类-从控制台输入
查看>>
关闭Linux防火墙(iptables) 及 SELinux
查看>>
VS .sln .csproj 文件的右键编译
查看>>
Laravel与Repository Pattern(仓库模式)
查看>>
CentOS安装emacs24.2命令
查看>>
USACO Sorting a Three-Valued Sequence
查看>>
XSLT简介
查看>>
Java中的Swing键盘绑定案例
查看>>
Raw-OS源代码分析之任务删除与总结
查看>>
【微信小程序】获取轮播图当前图片下标、滑动展示对应的位数、点击位数展示对应图片...
查看>>
SpringBoot配置属性之其他
查看>>
Calling convention-调用约定
查看>>
nginx配置url重写
查看>>
合作伙伴有华为联想的区块链项目Brahma OS派送糖果,截止25号
查看>>
国家市场监管总局:转供电主体不得截留降价红利
查看>>
面试不过的原因?不仅适用数据分析师!
查看>>
快速掌握JavaScript面试基础知识(一)
查看>>
Django进阶
查看>>