求由 n 个结点构成的不同的二叉树数。n≤100, 每个节点均认为是等价的。
输入一个整数 n,表示结点数。
输出对应的答案。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
__int128 fun(__int128 n) {
if (n == 0) {
return 1;
} else {
__int128 s1 = fun(n - 1);
__int128 s2 = 4 * n - 2;
__int128 s3 = n + 1;
return s1 * s2 / s3;
}
}
inline void read(__int128 &X) {
X = 0;
int w = 0;
char ch = 0;
while (!isdigit(ch)) {
w |= ch == '-';
ch = getchar();
}
while(isdigit(ch)) {
X = (X << 3) + (X << 1) + (ch ^ 48);
ch = getchar();
}
if (w) {
X = -X;
}
}
void print(__int128 x) {
if (x == 0) {
return ;
}
if (x < 0) {
putchar('-');
x = -x;
}
print(x / 10);
putchar(x % 10 + '0');
}
int main() {
__int128 n;
read(n);
__int128 ans = fun(n);
print(ans);
return 0;
}