Advertisement
Guest User

Untitled

a guest
Jan 27th, 2020
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.48 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <algorithm>
  4. #include <cstring>
  5.  
  6. using namespace std;
  7. ifstream f("fibocel.in");
  8. ofstream g("fibocel.out");
  9. long long comb[55][55];
  10. long long int fib[50],nrtermeni;
  11. void precalccomb()
  12. {comb[0][0]=1;
  13. comb[1][1]=1;
  14. comb[1][0]=1;
  15. for(int i=2;i<=50;i++)
  16. {comb[i][0]=1;
  17. for(int j=1;j<=i;j++)
  18. {
  19. comb[i][j]=comb[i-1][j]+comb[i-1][j-1];
  20. }
  21. }
  22. }
  23. void precalcfib()
  24. {
  25. fib[1]=1;
  26. fib[2]=2;
  27. int p;
  28. for(int i=3;i<=30;i++)
  29. {
  30. p=fib[i-1]+fib[i-2];
  31. if(p>50) break;
  32. fib[i]=p;
  33. nrtermeni=i;
  34. }
  35. }
  36. long long int fibocel(long long int x)
  37. {bool bit[55];
  38. int nrbiti=0,biti1=0;
  39.  
  40. long long cx=x;
  41. while(cx>0)
  42. {if(cx%2==1) biti1++;
  43. bit[++nrbiti]=cx%2;
  44. cx/=2;
  45. }
  46.  
  47.  
  48. long long sol=0;
  49. int copie1=biti1;
  50. for(int z=1;z<=nrtermeni;z++)
  51. {
  52. sol+=comb[nrbiti-1][fib[z]];
  53. biti1=copie1;
  54.  
  55. for(int i=1;i<nrbiti;i++)
  56. {
  57. if(bit[i]==1)
  58. {
  59. biti1--;
  60. if(fib[z]>=biti1){
  61. sol+=comb[i-1][fib[z]-biti1];
  62. }
  63.  
  64. }
  65.  
  66.  
  67. }
  68.  
  69.  
  70.  
  71. }
  72.  
  73.  
  74.  
  75. return sol;
  76.  
  77. }
  78. int main()
  79. {
  80. precalccomb();
  81.  
  82. precalcfib();
  83.  
  84. int q;
  85. f>>q;
  86. for(int i=1;i<=q;i++)
  87. {
  88. long long int a,b;
  89. f>>a>>b;
  90. g<<fibocel(b+1)-fibocel(a)<<'\n';
  91. }
  92.  
  93.  
  94.  
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement