hdu 1131 Count the Trees

卡特兰数*阶乘就是答案     第一次用java。。高精度写起来好快。。。。不过代码比较丑。。

import java.math.BigInteger;
import java.util.Scanner;

public class Main
{
    public static void main(String []args)
    {
        Scanner cin = new Scanner(System.in);
        int i,ii;
        BigInteger []c= new BigInteger[105];
        BigInteger []jie= new BigInteger[105];
        BigInteger linshi2;
        c[0]=new BigInteger("1");
        for(i=1;i<=100;i++)
        {
            int u=4*i+2;
            String str=String.valueOf(u);
            BigInteger ww=new BigInteger(str);
            linshi2=c[i-1].multiply(ww);
            u=i+2;
            String strr=String.valueOf(u);
            BigInteger www=new BigInteger(strr);
            c[i]=linshi2.divide(www);
        }
        jie[1]=new BigInteger("1");
        for(ii=2;ii<=100;ii++)
        {
            int ef=ii;
            String trt=String.valueOf(ef);
            BigInteger rr=new BigInteger(trt);
            jie[ii]=rr.multiply(jie[ii-1]);
        }
        while(cin.hasNext())
        {
            int pp=cin.nextInt();
            if(pp==0) break;
            System.out.println(c[pp-1].multiply(jie[pp]));
        }
    }
}
时间: 2024-10-12 13:41:38

hdu 1131 Count the Trees的相关文章

UVa 10007 &amp; hdu 1131 Count the Trees (卡特兰数)

Count the Trees Time Limit:3000MS    Memory Limit:0KB     64bit IO Format:%lld & %llu SubmitStatus Description  Count the Trees  Another common social inability is known as ACM (Abnormally Compulsive Meditation). This psychological disorder is somewh

HDU 1131 Count the Trees 大数计算

题目是说给出一个数字,然后以1到这个数为序号当做二叉树的结点,问总共有几种组成二叉树的方式.这个题就是用卡特兰数算出个数,然后因为有编号,不同的编号对应不同的方式,所以结果是卡特兰数乘这个数的阶乘种方案.因为数字比较大,所以要用高精度的方法也就是用字符数组来做,我分别写了三个函数,一个算加法,一个算乘法,最后一个打表,等打出表来最后只要判断一下输入的数是第几个,直接输出就行了,下面是我的代码,第一次写高精度的这种大数处理,可能看上去比较繁琐= = #include<iostream> #inc

hdu 1705 Count the grid(皮克定理)

题目链接:hdu 1705 Count the grid 题意: 给定一个三角形三点坐标,问三角形内有多少个坐标均为整数的点. 题解: 给定顶点坐标均是整点(或正方形格点)的简单多边形,皮克定理说明了其面积 S 和内部格点数目 n.边上格点数目 s 的关系:S = n +s/2+1 三角形两向量叉积/2=面积. 向量上整数点数为gcd(v.x,v.y)(此公式对于一条边上的结果不准确,但是三条边加在一起的和是准确的) 1 #include<bits/stdc++.h> 2 #define F(

zjuoj 3602 Count the Trees

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3602 Count the Trees Time Limit: 2 Seconds      Memory Limit: 65536 KB A binary tree is a tree data structure in which each node has at most two child nodes, usually distinguished as "left&

HDU 4916 Count on the path

题意: 给定一棵树和m个询问  每个询问要求回答不在u和v两节点所形成的路径上的点的最小标号 思路: 一开始以为是LCA-  不过T了好几次-  后来发现不用LCA也可做 考虑每个询问u和v  如果他们的lca不是1  则1一定是答案  不过求lca会T  那么我们只需要在遍历树的时候给节点染色  染的颜色就是1的儿子的颜色  如果x这个点在y的子树中(y是1的儿子)那么他的颜色就是y 染完色后我们考虑答案是如何构成的 如图所示  答案即是  红色  蓝色  绿色的子树中节点的最小值  那么我们

hdu 1392 Surround the Trees (凸包)

Surround the Trees Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 7043    Accepted Submission(s): 2688 Problem Description There are a lot of trees in an area. A peasant wants to buy a rope to

Count the Trees 典型卡特兰数

Count the Trees 题目分析:给你n个分别标为1,2,...,n的节点,问可以构成多少棵而叉树. 分析:首先考虑n个节点是相同的.任选一个节点做跟节点,那么剩下的n-1个节点构成跟节点的左子树和又子数. h[n] = h[0] * h[n-1] + h[1] * h[n - 2] + ... + h[n-1] * h[0];这正是卡特蓝表达式. h[n] = h[n-1] * (4 * n - 2) / (n + 1).   h[n] = C(2 * n,n)/(n + 1); 对于

HDU 4588 Count The Carries(找规律,模拟)

题目 大意: 求二进制的a加到b的进位数. 思路: 列出前几个2进制,找规律模拟. #include <stdio.h> #include <iostream> #include <algorithm> #include <string.h> #include <math.h> #include <stack> #include <vector> using namespace std; int main() { int

hdu 3336 Count the string

Count the stringTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4239    Accepted Submission(s): 1977 Problem Description It is well known that AekdyCoin is good at string problems as well as num