Saleh127

UVA 10007

Jul 29th, 2021
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.95 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define test int tt; cin>>tt; for(int cs=1;cs<=tt;cs++)
  5.  
  6. string ans[305];
  7. string f[305];
  8. string cat[305];
  9.  
  10. string multi(string nums1,string nums2)
  11. {
  12. ll l1 = nums1.size();
  13. ll l2 = nums2.size();
  14.  
  15. ll i,j;
  16.  
  17. string str( l1 + l2, '0');
  18.  
  19. for(i=l1-1; i>= 0; i--)
  20. {
  21. for(j=l2-1; j>= 0; j--)
  22. {
  23. ll p = (nums1[i]-'0')*(nums2[j]-'0') + (str[i+j+1]-'0');
  24. str[i+j+1] = p%10 + '0';
  25. str[i+j] += p/10;
  26. }
  27. }
  28. for(i=0; i<l1+l2; i++)
  29. {
  30. if(str[i]!= '0')
  31. {
  32. return str.substr(i);
  33. }
  34. }
  35. return "0";
  36. }
  37.  
  38. string addd(string a,string c)
  39. {
  40.  
  41. ll s1,s2,l,i,j,k=0;
  42. string sum="";
  43.  
  44. reverse(a.begin(),a.end());
  45. reverse(c.begin(),c.end());
  46.  
  47. s1=a.size();
  48. s2=c.size();
  49. l=max(s1,s2);
  50.  
  51. for(i=0; i<l; i++)
  52. {
  53. if(i<s1)
  54. {
  55. k+=(a[i]-'0');
  56. }
  57. if(i<s2)
  58. {
  59. k+=(c[i]-'0');
  60. }
  61. sum+=((k%10)+'0');
  62. k/=10;
  63. }
  64.  
  65. if(k)
  66. {
  67. sum+=(k+'0');
  68. }
  69. reverse(sum.begin(),sum.end());
  70.  
  71. for(i = 0; i <sum.size(); i++)
  72. {
  73. if(sum[i]!= '0')
  74. {
  75. return sum.substr(i);
  76. }
  77. }
  78. return "0";
  79. }
  80.  
  81. int main()
  82. {
  83. ios_base::sync_with_stdio(0);
  84. cin.tie(0);
  85. cout.tie(0);
  86.  
  87.  
  88. ll n,i,j,k,l;
  89. string x,y,z;
  90.  
  91. f[0]="1";
  92.  
  93. for(i=1;i<302;i++)
  94. {
  95. x=to_string(i);
  96. f[i]=multi(f[i-1],x);
  97. }
  98.  
  99. cat[0]=cat[1]="1";
  100.  
  101. ans[0]="1";
  102. ans[1]="1";
  103.  
  104.  
  105. for(i=2;i<302;i++)
  106. {
  107. for(j=0;j<i;j++)
  108. {
  109. y=multi(cat[j],cat[i-j-1]);
  110. cat[i]=addd(cat[i],y);
  111. }
  112. ans[i]=multi(cat[i],f[i]);
  113. }
  114.  
  115.  
  116. while(cin>>n && n)
  117. {
  118. cout<<ans[n]<<endl;
  119. }
  120.  
  121. return 0;
  122. }
  123.  
Advertisement
Add Comment
Please, Sign In to add comment