Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstdlib>
- #include<vector>
- #include<cmath>
- #include<cstring>
- #include<ctime>
- #define long long long
- #define nln '\n'
- using namespace std;
- void fill(string &a, string &b)
- {
- if (a.size() == b.size())
- return;
- long dlt = abs((long)(a.size()-b.size()));
- if (a.size() > b.size())
- {
- for (long i = 1; i <= dlt; ++i)
- b = '0' + b;
- return;
- }
- for (long i = 1; i <= dlt; ++i)
- a = '0' + a;
- }
- string sum(string a, string b)
- {
- fill(a, b);
- long rem = 0;
- string res = "";
- for (long i = a.size()-1; i >= 0; --i)
- {
- long tol = (a[i]-'0')+(b[i]-'0') + rem;
- res = (char)((tol%10)+'0') + res;
- rem = tol/10;
- }
- if (rem != 0)
- res = (char)(rem+'0') + res;
- return res;
- }
- string mul(string a, string b)
- {
- string res = "";
- for (long i = b.size()-1; i >= 0; --i)
- {
- long rem = 0;
- string tem = "";
- for (long j = a.size()-1; j >= 0; --j)
- {
- long tol = (a[j]-'0')*(b[i]-'0')+rem;
- tem = (char)((tol%10)+'0') + tem;
- rem = tol/10;
- }
- if (rem != 0)
- tem = (char)(rem+'0') + tem;
- for (long j = 0; j < b.size()-i-1; ++j)
- tem += '0';
- res = sum(res, tem);
- }
- return res;
- }
- long str2num(string str)
- {
- long num = 0;
- for (long i = 0; i < (long)str.size(); ++i)
- num += (str[i]-'0')*pow(10, str.size()-i-1);
- return num;
- }
- string num2str(long num)
- {
- string str = "";
- while (num > 0)
- {
- str = (char)((num%10)+'0') + str;
- num /= 10;
- }
- return str;
- }
- string div(string a, string b)
- {
- string tem = "", res = "";
- long nbb = str2num(b);
- for (long i = 0; i < (long)a.size(); ++i)
- {
- tem += a[i];
- long nbt = str2num(tem);
- if (nbt >= nbb)
- {
- res += num2str(nbt/nbb);
- tem = num2str(nbt%nbb);
- }
- else
- res += '0';
- }
- while (res[0] == '0')
- res.erase(0, 1);
- return res;
- }
- long n;
- void solve1()
- {
- /*vector<string> a(n+1, "");
- a[0] = "1";
- for (long i = 1; i <= n; ++i)
- {
- string res = "0";
- for (long j = 0; j < i; ++j)
- res = sum(res, mul(a[j], a[i-j-1]));
- a[i] = res;
- }
- cout << a[n] << nln;*/
- }
- void solve2()
- {
- string ans = "1";
- for (long i = n+1; i <= 2*n; ++i)
- {
- string tem = num2str(i);
- ans = mul(ans, tem);
- }
- for (long i = 1; i <= n+1; ++i)
- {
- string tem = num2str(i);
- ans = div(ans, tem);
- }
- cout << ans << nln;
- cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
- }
- void solve3()
- {
- vector<string> f(n+2, "0");
- f[0] = f[1] = "1";
- for (long i = 1; i <= n; ++i)
- f[i+1] = div(mul(num2str(4*i-2), f[i]),num2str(i+1));
- cout << f[n+1] << nln;
- }
- int main()
- {
- //freopen("catalan_number.inp", "r", stdin);
- cin >> n;
- solve3();
- cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment