CSU 1320: Scoop water(卡特蘭數 JAVA)
阿新 • • 發佈:2019-02-06
題目:
Description
zzy今天剛買了兩個水瓢A和B,容量都是為1升,童心未泯的他打算用這個水瓢來玩遊戲。
首先zzy準備了一個容量可看作無窮大的水缸,剛開始水缸是空的,然後用水瓢A往水缸里加水,用水瓢B把水缸裡的水舀出去,當使用 水瓢B把水舀出去時水缸裡必須要至少有1升的水。這樣子使用N次水瓢A,也使用N次水瓢B,最後水缸會依舊空的。
Input
輸入有多個例子,直到檔案結束。
每個例子僅含一個數N(0<N<=10000),表示你必須使用N次A水瓢和N次B水瓢。
Output
對於每個例子,請輸出一個數,表示一共有多少種正確的舀水方式使得舀水過程中 使用B水瓢時水缸裡總會有足夠的水。
(由於數字比較大,輸出的答案模1000000007)
Sample Input
1 2
Sample Output
1 2
思路:其實就是卡特蘭數,用遞推式把前10000個卡特蘭數都求出來即可
程式碼:
import java.util.*;
import java.math.BigInteger;
public class Main{
public static void main(String[] args) {
BigInteger[] s=new BigInteger[10001];
s[1]=new BigInteger("1");
for(int i=2;i<=10000;i++)s[i]=s[i-1 ].multiply(BigInteger.valueOf(i*4-2)).divide(BigInteger.valueOf(i+1));
Scanner cin = new Scanner(System.in);
while(cin.hasNext())
{
int n=Integer.parseInt(cin.nextLine());
System.out.println(s[n].remainder(BigInteger.valueOf(1000000007)).toString());
}
}
}