delete pics to save space
This commit is contained in:
86
7.1737.cpp
Normal file
86
7.1737.cpp
Normal file
@ -0,0 +1,86 @@
|
||||
#include<cstdio>
|
||||
#include<cstring>
|
||||
#include<iostream>
|
||||
#include<algorithm>
|
||||
#define ll long long
|
||||
using namespace std;
|
||||
const int N = 60, S = 600;
|
||||
int n;
|
||||
struct A{
|
||||
int a[S], len;
|
||||
inline A operator / (const int x) const {
|
||||
A ans;
|
||||
memset(ans.a, 0, sizeof(ans.a));
|
||||
ans.len = 0;
|
||||
int num = 0;
|
||||
for (int i = len; i; i--) {
|
||||
num = num * 10 + a[i];
|
||||
ans.a[i] = num / x;
|
||||
num %= x;
|
||||
if (!ans.len && ans.a[i]) ans.len = i;
|
||||
}
|
||||
return ans;
|
||||
}
|
||||
inline A operator + (const A x) const {
|
||||
A ans;
|
||||
memset(ans.a, 0, sizeof(ans.a));
|
||||
for (int i = 1; i <= max(len, x.len); i++) {
|
||||
ans.a[i] += a[i] + x.a[i];
|
||||
ans.a[i+1] = ans.a[i] / 10;
|
||||
ans.a[i] %= 10;
|
||||
}
|
||||
ans.len = max(len, x.len);
|
||||
if (ans.a[ans.len+1]) ++ans.len;
|
||||
return ans;
|
||||
}
|
||||
inline A operator * (const A x) const {
|
||||
A ans;
|
||||
memset(ans.a, 0, sizeof(ans.a));
|
||||
for (int i = 1; i <= len; i++)
|
||||
for (int j = 1; j <= x.len; j++) {
|
||||
ans.a[i+j-1] += a[i] * x.a[j];
|
||||
ans.a[i+j] += ans.a[i+j-1] / 10;
|
||||
ans.a[i+j-1] %= 10;
|
||||
}
|
||||
ans.len = len + x.len - 1;
|
||||
if (ans.a[ans.len+1]) ++ans.len;
|
||||
return ans;
|
||||
}
|
||||
} f[N], p[N];
|
||||
|
||||
inline A C(int x, int y) {
|
||||
A ans;
|
||||
ans.len = ans.a[1] = 1;
|
||||
for (int i = y, j = 1; j <= x; i--, j++) {
|
||||
int t = i;
|
||||
A tmp;
|
||||
tmp.len = 0;
|
||||
while (t) {
|
||||
tmp.a[++tmp.len] = t % 10;
|
||||
t /= 10;
|
||||
}
|
||||
ans = ans * tmp / j;
|
||||
}
|
||||
return ans;
|
||||
}
|
||||
|
||||
inline void print(A x) {
|
||||
for (int i = x.len; i; i--) printf("%d", x.a[i]);
|
||||
puts("");
|
||||
}
|
||||
|
||||
int main() {
|
||||
for (int i = 1; i <= 50; i++) {
|
||||
ll t = (1ll << i) - 1;
|
||||
while (t) {
|
||||
p[i].a[++p[i].len] = t % 10;
|
||||
t /= 10;
|
||||
}
|
||||
}
|
||||
f[1].len = f[2].len = f[1].a[1] = f[2].a[1] = 1;
|
||||
for (int i = 3; i <= 50; i++)
|
||||
for (int j = 1; j <= i - 1; j++)
|
||||
f[i] = f[i] + C(j - 1, i - 2) * f[j] * f[i-j] * p[j];
|
||||
while (cin >> n && n) print(f[n]);
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user