hdu 3723 Card Game(JAVA,卡特兰数)

很容易想到的卡特兰数,不过复杂度高精度还是挺恶心的。

于是用JAVA秒杀了。

import java.math.BigInteger;
import java.util.Scanner;
public class Main {
     static BigInteger[] f=new BigInteger[5005];
     static BigInteger[] c=new BigInteger[10005];
     static BigInteger MOD;

     static void init(){
    	 f[0]=BigInteger.valueOf(1);
    	 for(int i=1;i<=5000;i++){
    		 f[i]=f[i-1].multiply(BigInteger.valueOf(4*i-2));
    		 f[i]=f[i].divide(BigInteger.valueOf(i+1));
    	 }
    	 String str="1";
    	 for(int i=0;i<100;i++)str+="0";
    	 MOD=new BigInteger(str);
     }
     public static void main(String[] args){
    	 init();
    	 Scanner cin=new Scanner(System.in);
    	 while(cin.hasNext()){
    		 int n=cin.nextInt();
    		 c[0]=BigInteger.valueOf(1);
    		 for(int i=1;i<=n;i++){
    			 c[i]=c[i-1].multiply(BigInteger.valueOf(n-i+1));
    			 c[i]=c[i].divide(BigInteger.valueOf(i));
    		 }
    		 BigInteger ans=BigInteger.valueOf(0);
    		 for(int i=0;i*2<=n;i++){
    			 BigInteger tmp=c[i*2].mod(MOD).multiply(f[i].mod(MOD));
    			 ans=ans.add(tmp);
    			 ans=ans.mod(MOD);
    		 }
    		 System.out.println(ans);
    	 }
     }
}

  

时间: 2024-10-18 16:14:07

hdu 3723 Card Game(JAVA,卡特兰数)的相关文章

hdu 5177 (1e18范围的卡特兰数)

hdu 5177 (1e18范围的卡特兰数) 题意: 求第n个卡特兰数,模3814697265625 (5^18) 限制: 有20组数据,1 <= n <= 1e18 思路: 1. 卡特兰数的表达式: ans = 1/(n+1) * C(2*n,n) -> ans = 1/(n+1) * (2n)! / n! / n!    ---1式 2. 因为要模5^18,求逆元要求互质,所以先把"1式"中的因子5全部去掉 3. 然后看不含因子5的阶乘,f(n!) 4. 设g(x

HDU 1133 Buy the Ticket 卡特兰数

设50元的人为+1 100元的人为-1 满足前任意k个人的和大于等于0 卡特兰数 C(n+m, m)-C(n+m, m+1)*n!*m! import java.math.*; import java.util.*; public class Main { /** * @param args */ public static void main(String[] args) { Scanner sc = new Scanner(System.in); int cas = 1; while(tru

HDU 1023 Train Problem II (卡特兰数,经典)

题意:给出一个数字n,假设火车从1~n的顺序分别进站,求有多少种出站序列. 思路:卡特兰数的经典例子.n<101,用递推式解决.需要使用到大数.n=100时大概有200位以下. 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N=101; 4 vector<string> vect; 5 void _mult(string num1, string num2, string &result )

HDU Train Problem II (卡特兰数+大数)

Problem Description As we all know the Train Problem I, the boss of the Ignatius Train Station want to know if all the trains come in strict-increasing order, how many orders that all the trains can get out of the railway.   Input The input contains

HDU 3723 Delta Wave (高精度+calelan数)

题意:给定一个图,问你只能向上向下,或者平着走,有多少种方法可以走到最后一个格. 析:首先先考虑,如果没有平的情况就是calelan数了,现在有平的情况,那么就枚举呗,因为数很大,所以要用高精度. 答案应该是sum(C(n, 2*i)*C(n, i)/(i+1)) = a1 + a2 + a3 + ....,然后可以再化简一下,成为一个递推式ai = ai-1 * (n-2*i+1)*(n-2*i+2)/(k*(k+1)): 这次用记事本写的,然后没有测试,直接交的,虽然CE了一发,但还是挺好的

LA 5092 &amp;&amp; hdu 3723 Delta Wave (卡特兰数)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=3723 and http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=20568 题意:有种折线每向右延伸一个单位长度,高度要么不变,要么加1,要么减1.而且任何时刻高度不能低于0.求这种折线最终高度为0的情况总数. 分析:由于任何时刻斜向上的线不小于斜向下的线的数目,而且最终相等,,,,,卡特兰数模型.卡特兰数资料 若有i条斜向上的线,那

HDU 1134 Game of Connections(卡特兰数)

题目代号:HDU 1134 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1134 Game of Connections Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4668    Accepted Submission(s): 2729 Problem Description Thi

hdu 4828 Grids(拓展欧几里得+卡特兰数)

题目链接:hdu 4828 Grids 题目大意:略. 解题思路:将上一行看成是入栈,下一行看成是出栈,那么执着的方案就是卡特兰数,用递推的方式求解. #include <cstdio> #include <cstring> typedef long long ll; const int N = 1000005; const ll MOD = 1e9+7; ll dp[N]; ll extendGcd(ll a, ll b, ll& x, ll& y) { if (

特殊函数卡特兰数 hdu 1134

Game of Connections Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3352    Accepted Submission(s): 1910 Problem Description This is a small but ancient game. You are supposed to write down the