Train Problem II
import java.util.*;
import java.math.*;
public class Main
{
public static void main(String []args)
{
Scanner cin=new Scanner(System.in);
int i,n;
while(cin.hasNext())
{
n=cin.nextInt();
BigInteger s1 = BigInteger.valueOf(1);
BigInteger s2 = BigInteger.valueOf(1);
BigInteger s3 = BigInteger.valueOf(1);
for(i=1;i<=n;i++)
s1 = s1.multiply(BigInteger.valueOf(i));
for(i=n+2;i<=2*n;i++)
s2 = s2.multiply(BigInteger.valueOf(i));
s3 = s2.divide(s1);
System.out.println(s3);
}
}
}
这个题目求的是n个数字出栈的所有可能序列,利用公式count=C(2*n,n)-C(2*n,n-1);
进行进一步的化简得到count=(n+2)*(n+3)*……*(2*n)/(1*2*3……*n);
然后进行大数的操作,由于C语言实现比较麻烦,所以选用了Java的大数处理,果断AC了!

浙公网安备 33010602011771号