Iamtui1010

catalan_number

Dec 13th, 2021
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.75 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstdlib>
  3. #include<vector>
  4. #include<cmath>
  5. #include<cstring>
  6. #include<ctime>
  7.  
  8. #define long long long
  9. #define nln '\n'
  10.  
  11. using namespace std;
  12.  
  13. void fill(string &a, string &b)
  14. {
  15.     if (a.size() == b.size())
  16.         return;
  17.     long dlt = abs((long)(a.size()-b.size()));
  18.     if (a.size() > b.size())
  19.     {
  20.         for (long i = 1; i <= dlt; ++i)
  21.             b = '0' + b;
  22.         return;
  23.     }
  24.     for (long i = 1; i <= dlt; ++i)
  25.             a = '0' + a;
  26. }
  27.  
  28. string sum(string a, string b)
  29. {
  30.     fill(a, b);
  31.     long rem = 0;
  32.     string res = "";
  33.     for (long i = a.size()-1; i >= 0; --i)
  34.     {
  35.         long tol = (a[i]-'0')+(b[i]-'0') + rem;
  36.         res = (char)((tol%10)+'0') + res;
  37.         rem = tol/10;
  38.     }
  39.     if (rem != 0)
  40.         res = (char)(rem+'0') + res;
  41.     return res;
  42. }
  43.  
  44. string mul(string a, string b)
  45. {
  46.     string res = "";
  47.     for (long i = b.size()-1; i >= 0; --i)
  48.     {
  49.         long rem = 0;
  50.         string tem = "";
  51.         for (long j = a.size()-1; j >= 0; --j)
  52.         {
  53.             long tol = (a[j]-'0')*(b[i]-'0')+rem;
  54.             tem = (char)((tol%10)+'0') + tem;
  55.             rem = tol/10;
  56.         }
  57.         if (rem != 0)
  58.             tem = (char)(rem+'0') + tem;
  59.         for (long j = 0; j < b.size()-i-1; ++j)
  60.             tem += '0';
  61.         res = sum(res, tem);
  62.     }
  63.     return res;
  64. }
  65.  
  66. long str2num(string str)
  67. {
  68.     long num = 0;
  69.     for (long i = 0; i < (long)str.size(); ++i)
  70.         num += (str[i]-'0')*pow(10, str.size()-i-1);
  71.     return num;
  72. }
  73.  
  74. string num2str(long num)
  75. {
  76.     string str = "";
  77.     while (num > 0)
  78.     {
  79.         str = (char)((num%10)+'0') + str;
  80.         num /= 10;
  81.     }
  82.     return str;
  83. }
  84.  
  85. string div(string a, string b)
  86. {
  87.     string tem = "", res = "";
  88.     long nbb = str2num(b);
  89.     for (long i = 0; i < (long)a.size(); ++i)
  90.     {
  91.         tem += a[i];
  92.         long nbt = str2num(tem);
  93.         if (nbt >= nbb)
  94.         {
  95.             res += num2str(nbt/nbb);
  96.             tem = num2str(nbt%nbb);
  97.         }
  98.         else
  99.             res += '0';
  100.     }
  101.     while (res[0] == '0')
  102.         res.erase(0, 1);
  103.     return res;
  104. }
  105.  
  106. long n;
  107.  
  108. void solve1()
  109. {
  110.     /*vector<string> a(n+1, "");
  111.     a[0] = "1";
  112.     for (long i = 1; i <= n; ++i)
  113.     {
  114.         string res = "0";
  115.         for (long j = 0; j < i; ++j)
  116.             res = sum(res, mul(a[j], a[i-j-1]));
  117.         a[i] = res;
  118.     }
  119.     cout << a[n] << nln;*/
  120. }
  121.  
  122. void solve2()
  123. {
  124.     string ans = "1";
  125.     for (long i = n+1; i <= 2*n; ++i)
  126.     {
  127.         string tem = num2str(i);
  128.         ans = mul(ans, tem);
  129.     }
  130.  
  131.     for (long i = 1; i <= n+1; ++i)
  132.     {
  133.         string tem = num2str(i);
  134.         ans = div(ans, tem);
  135.     }  
  136.     cout << ans << nln;
  137.     cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
  138. }
  139.  
  140. void solve3()
  141. {
  142.     vector<string> f(n+2, "0");
  143.     f[0] = f[1] = "1";
  144.     for (long i = 1; i <= n; ++i)
  145.         f[i+1] = div(mul(num2str(4*i-2), f[i]),num2str(i+1));
  146.     cout << f[n+1] << nln;
  147. }
  148.  
  149. int main()
  150. {
  151.     //freopen("catalan_number.inp", "r", stdin);
  152.     cin >> n;
  153.     solve3();
  154.     cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
  155.     return 0;
  156. }
Advertisement
Add Comment
Please, Sign In to add comment