Advertisement
a53

fibocel

a53
Aug 16th, 2017
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.73 KB | None | 0 0
  1. #include <cstdio>
  2. #include <vector>
  3. #include <string>
  4. #include <algorithm>
  5. #define infile "fibocel.in"
  6. #define outfile "fibocel.out"
  7. #define fMax 131
  8. #define ll long long
  9. using namespace std;
  10. ll pas[fMax][fMax];
  11. vector <int> fibo;
  12.  
  13. void initiFibo()
  14. {
  15. fibo.push_back(1);
  16. fibo.push_back(2);
  17.  
  18. for (int i = 2; fibo[i-1] + fibo[i-2] < fMax; ++i)
  19. fibo.push_back(fibo[i-1] + fibo[i-2]);
  20. }
  21.  
  22. void initPascal()
  23. {
  24. pas[0][0] = 1;
  25.  
  26. for (int i = 1; i < fMax; ++i)
  27. for (int j = 0; j < i+1; ++j)
  28. pas[i][j] = pas[i-1][j-1] + pas[i-1][j];
  29. }
  30.  
  31. string binary(ll x)
  32. {
  33. if (!x)
  34. return "0";
  35. string ret = "";
  36. while (x)
  37. {
  38. int bit = x&1;
  39. x >>= 1;
  40. ret = char('0' + bit) + ret;
  41. }
  42.  
  43. return ret;
  44. }
  45.  
  46. ll query(ll x)
  47. {
  48. string bin = binary(x);
  49. int l = bin.length();
  50. ll ret = 0;
  51.  
  52. for (size_t f = 0; f < fibo.size() && fibo[f] <= l; ++f)
  53. {
  54. int neededBits = fibo[f];
  55. for (int i = 0; i < l; ++i)
  56. {
  57. int remainLength = l - i - 1;
  58.  
  59. if (bin[i] == '1')
  60. {
  61. if (!neededBits)
  62. {
  63. ret++;
  64. break;
  65. }
  66.  
  67. ret += pas[remainLength][neededBits];
  68. neededBits--;
  69. }
  70. }
  71. }
  72. return ret;
  73. }
  74.  
  75. int main()
  76. {
  77. freopen(infile, "r", stdin);
  78. freopen(outfile, "w", stdout);
  79. initiFibo();
  80. initPascal();
  81. int q;
  82. scanf("%d", &q);
  83. while (q--)
  84. {
  85. ll x, y;
  86. scanf("%lld %lld", &x, &y);
  87. printf("%lld\n", query(y+1) - query(x));
  88. }
  89.  
  90. fclose(stdin);
  91. fclose(stdout);
  92. return 0;
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement