瞬间移动
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 893 Accepted Submission(s): 476
Problem Description
有一个无限大的矩形,初始时你在左上角(即第一行第一列),每次你都可以选择一个右下方格子,并瞬移过去(如从下图中的红色格子能直接瞬移到蓝色格子),求到第n行第m列的格子有几种方案,答案对1000000007取模。
Input
多组测试数据。
两个整数n,m(2≤n,m≤100000)
Output
一个整数表示答案
Sample Input
4 5
Sample Output
10
Source
2016”百度之星” - 初赛(Astar Round2B)
首先找出是一个杨辉三角。。。
那么很容易得到 ans = C (m+n-4,m-2)
然后的话组合数取模,但是mod太大,这时候有三种方法:
- 预处理阶乘,然后直接定义法求解
- 预处理N以内的逆元,然后用组合数线性递推公式边走边求
- 直接求出阶乘,然后用递归求逆元,此时的数可能超过N
下面给出第一种方法,注意阶乘要预处理到2N,因为是m+