注:最近这一系列ACM的内容,都是2年多之前的代码,自己回顾一下。
牛税
Submit: 1434 Accepted:442
Time Limit: 1000MS Memory Limit: 65536K
Description
912农场的很多农场主们都要交税了,当地政府规定,由于每个农场的效益都差不多,所以每个农场主的交税金额都一样:一头小牛!这可愁坏了一半的农场主,因为他们手中只有大牛!政府于是又补充说,交税者可以上交一头大牛的同时,抱回去一头小牛,农场主都同意了这个方案。可是税务局犯愁了,因为如果一个农场主抱来一头大牛交税而他们手中又没有小牛可以返还的话,农场主会很生气第二年就不交税了,所以他们需要安排农场主交税的顺序,使得每个抱大牛来的农场主都会有小牛抱回去,注意,当排序的时候他们不会关心每个农场主是谁,他们只关心他们要交的是大牛还是小牛,请问他们一共有多少种排序方法呢?
Input
第一行是一个数t,表示有t组数据。
之后每行是一个偶数n(0 < n <40),表示农场主的数量,其中n/2的农场主只有小牛,剩下的则只有大牛。
Output
对于每组数据,每行输出一共有多少种安排方法,才可以顺利完成牛税的征收。
Sample Input
1
4
Sample Output
2
Hint
如对于sample,税务局可以安排两个农场主交小牛,然后两个交大牛,也可以小牛大牛轮流交,故共有两种方法。
Source
卡特兰数问题
#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/2) << endl;
}
// system("pause");
return 0;
}