Saleh127

UVA 763

Feb 17th, 2021
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.25 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define test int t; cin>>t; for(int cs=1;cs<=t;cs++)
  5. string f[10000];
  6.  
  7. string addd(string a,string c)
  8. {
  9.  
  10. ll s1,s2,l,i,j,k=0;
  11. string sum="";
  12.  
  13. reverse(a.begin(),a.end());
  14. reverse(c.begin(),c.end());
  15.  
  16. s1=a.size();
  17. s2=c.size();
  18. l=max(s1,s2);
  19.  
  20. for(i=0; i<l; i++)
  21. {
  22. if(i<s1)
  23. {
  24. k+=(a[i]-'0');
  25. }
  26. if(i<s2)
  27. {
  28. k+=(c[i]-'0');
  29. }
  30. sum+=((k%10)+'0');
  31. k/=10;
  32. }
  33.  
  34. if(k)
  35. {
  36. sum+=(k+'0');
  37. }
  38. reverse(sum.begin(),sum.end());
  39.  
  40. for(i = 0; i <sum.size(); i++)
  41. {
  42. if(sum[i]!= '0')
  43. {
  44. return sum.substr(i);
  45. }
  46. }
  47. return "0";
  48. }
  49.  
  50. string subtract(string str1, string str2)
  51. {
  52.  
  53. string str;
  54.  
  55. ll n1 = str1.length();
  56. ll n2 = str2.length();
  57.  
  58. reverse(str1.begin(), str1.end());
  59. reverse(str2.begin(), str2.end());
  60.  
  61. ll carry=0,i,sub;
  62.  
  63. for (i = 0; i < n2; i++)
  64. {
  65. sub= ((str1[i] - '0') - (str2[i] - '0') - carry);
  66. if (sub < 0)
  67. {
  68. sub = sub + 10;
  69. carry = 1;
  70. }
  71. else
  72. {
  73. carry = 0;
  74. }
  75.  
  76. str+=(sub+'0');
  77. }
  78.  
  79. for (i=n2; i < n1; i++)
  80. {
  81. sub=((str1[i] - '0') - carry);
  82. if (sub<0)
  83. {
  84. sub = sub + 10;
  85. carry = 1;
  86. }
  87. else
  88. {
  89. carry = 0;
  90. }
  91.  
  92. str+=(sub+'0');
  93. }
  94.  
  95. reverse(str.begin(), str.end());
  96.  
  97. for(i=0; i<str.size(); i++)
  98. {
  99. if(str[i]!= '0')
  100. {
  101. return str.substr(i);
  102. }
  103. }
  104. return "0";
  105. }
  106. bool great(string s1, string s2)
  107. {
  108. ll n = s1.size();
  109. ll m = s2.size();
  110.  
  111. if(n>m)
  112. return true;
  113. else if(n<m)
  114. return false;
  115. else
  116. {
  117. if(s1>=s2)
  118. return true;
  119. else
  120. return false;
  121. }
  122. }
  123. void fivonacci()
  124. {
  125. f[0]="1";
  126. f[1]="1";
  127. f[2]="2";
  128. for(ll i=3; i<=130; i++)
  129. {
  130. f[i]=addd(f[i-1],f[i-2]);
  131. }
  132. }
  133. int main()
  134. {
  135. ios_base::sync_with_stdio(0);
  136. cin.tie(0);
  137. cout.tie(0);
  138.  
  139. fivonacci();
  140.  
  141.  
  142. string a,b;
  143. ll i,j=0,k,l;
  144.  
  145. while(cin>>a>>b)
  146. {
  147.  
  148. if(j) cout<<endl;
  149. reverse(a.begin(),a.end());
  150. reverse(b.begin(),b.end());
  151.  
  152. string c="0",d="0",e="";
  153.  
  154. for(i=0; i<a.size(); i++)
  155. {
  156. if(a[i]=='1')
  157. {
  158. c=addd(c,f[i+1]);
  159. }
  160. }
  161.  
  162. for(i=0; i<b.size(); i++)
  163. {
  164. if(b[i]=='1')
  165. {
  166. d=addd(d,f[i+1]);
  167. }
  168. }
  169. e=addd(c,d);
  170. string ss="";
  171. k=0;
  172. for(i=110;i>=1;i--)
  173. {
  174. if(great(e, f[i]))
  175. {
  176. ss+='1';
  177. string x=subtract(e,f[i]);
  178. e.clear();
  179. e=x;
  180. k=1;
  181. }
  182. else
  183. {
  184. if(k) ss+='0';
  185. }
  186. }
  187. if(ss=="") ss="0";
  188. cout<<ss<<endl;
  189. j=1;
  190. }
  191.  
  192.  
  193. return 0;
  194. }
  195.  
Advertisement
Add Comment
Please, Sign In to add comment