o.boj 1035 冥王星的故事III-和谈

注:最近这一系列ACM的内容,都是2年多之前的代码,自己回顾一下。

 
冥王星的故事III-和谈
 
Submit: 1111    Accepted:518
Time Limit: 1000MS  Memory Limit: 65536K
Description
由于冥王星H将军的强大攻势,已经攻占了地球的几个国家,地球决定派出他们的大使Wing和Pluto的大使xiaolonghingis进行和谈。

经过艰苦的谈判,最终冥王星开除了谈判的条件:
1 恢复Pluto的行星地位,并对战争进行赔偿。
2 完成由Pluto国王zhao0057出的一道智力题

题目描述如下:
由于冥王星采用二进制进位的制度,所以那里的居民经常会提出一些有关于二进制数的问题,其中之一是:给出n个0与n个1,将其按照一定顺序进行排列,则从左向右数,1的累计数总是大于或等于0的累计数,那么这样的排列一共有多少种?地球的命运掌握在你的手中了。


Input
输入第一行是一个正整数 T (T<=10) 表示测试数据的组数。
接下来T行,每一行包括一个数字n(n<=10),表示0和1的个数。


Output
对于每组输入,输出排列的个数。

Sample Input

2
1
2


Sample Output

1
2


Hint
n=1,那么只有10一种组合,n=2,有1010,1100两种组合


Source
zhao0057@Pluto
 
这是一个 卡特兰数问题,知道结论便直接能解了
 

#include <iostream>

using namespace std;

long long C(long long a, long long b)
{
    long long i = 1;
    long long num = 1;
    
    for (; i <=b; i++)
    {
        num = num * a / i;
        a--;
    }
    return num;
}

long long Catalan(long long n)
{
    return C(2*n, n) / (n + 1);
}

int main()
{
    long long x, n;
    
    cin >> x;
    
    while (x--)
    {
        cin >> n;
        cout << Catalan(n) << endl;
    }
    
    // system("pause");
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值