hdu1133

Buy the Ticket

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 6867    Accepted Submission(s): 2845

Problem Description

The "Harry Potter and the Goblet of Fire" will be on show in the next few days. As a crazy fan of Harry Potter, you will go to the cinema and have the first sight, won’t you?

Suppose the cinema only has one ticket-office and the price for per-ticket is 50 dollars. The queue for buying the tickets is consisted of m + n persons (m persons each only has the 50-dollar bill and n persons each only has the 100-dollar bill).

Now the problem for you is to calculate the number of different ways of the queue that the buying process won‘t be stopped from the first person till the last person.
Note: initially the ticket-office has no money.

The buying process will be stopped on the occasion that the ticket-office has no 50-dollar bill but the first person of the queue only has the 100-dollar bill.

Input

The input file contains several test cases. Each test case is made up of two integer numbers: m and n. It is terminated by m = n = 0. Otherwise, m, n <=100.

Output

For each test case, first print the test number (counting from 1) in one line, then output the number of different ways in another line.

Sample Input

3 0
3 1
3 3
0 0

Sample Output

Test #1:
6
Test #2:
18
Test #3:
180

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

hdu1133的相关文章

hdu1133 Buy the Ticket (卡兰特数应用+java大数)

题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=1133 [题意] 电影票50块一张 有m个人手里正好有50块,n个人手里正好有100块,售票厅開始没有钱.问,有多少种排队的方式,能够让每一个人都买上票. (假设售票厅没有50块零钱,则持有100块的人买不了票) [分析] 显然.当m<n的时候,有0种排列方式. 当m>=n的时候: 用0.代表手里仅仅有50块的人,1,代表手里仅仅有100块的. 则0110100 这样的情况不能满足条件(到第三个人

Buy the Ticket{HDU1133}

Buy the TicketTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 6517 Accepted Submission(s): 2720 Problem DescriptionThe "Harry Potter and the Goblet of Fire" will be on show in the next few day

计数 组合数学动态规划总结

本文持续更新 对计数,组合数学DP作总结,给出思路,状态转移方程,略去代码,状态初始值等. 1 划分数 m个不可区分的物品分成n份,每份的数量大于等于0,求划分的方法数. 思路: 若m < n, 则等价于m个物品划分为m份. 否则,若至少存在1份数量为0,则相当于m个物品划分为n - 1份;若每份数量大于等于1,则相当于m - n个物品划分为n份.动态规划或记忆化搜索. 2 HDU1502 Regular Words 给定n,求n个A,n个B,n个C组成的串的任意前缀中A的数量大于等于B的数量,

Catalan数总结

性质: 前20项为:1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190: 通常应用用递推1式和一般式的2式: 递推1式展开来就很容易理解,通常是问题递归到2个子问题: 一般式的应用主要是买票问题:hdu1133(括号配对之类也是,只要能转换为1和-1,求前K项和非负的情况数): 维基百