Advertisement
a53

piese1

a53
Apr 2nd, 2018
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.21 KB | None | 0 0
  1. /*
  2. prof. Constantin Galatan
  3. Complexitate O(2^(n/2))
  4. */
  5. #include <vector>
  6. #include <fstream>
  7. #include <iostream>
  8. #include <algorithm>
  9. using namespace std;
  10.  
  11. ifstream fin("piese1.in");
  12. ofstream fout("piese1.out");
  13.  
  14. int main()
  15. {
  16. int n;
  17. long long T;
  18.  
  19. fin >> n >> T;
  20.  
  21. vector<int> p(n);
  22. for (int i = 0; i < n; ++i)
  23. fin >> p[i];
  24.  
  25. vector<long long> x, y;
  26. int nx = n / 2;
  27. int ny = n - nx;
  28.  
  29. for (int i = 0; i < (1 << nx); i++)
  30. {
  31. x.push_back(0);
  32. for (int j = 0; j < nx; j++)
  33. if ((1 << j) & i) // daca setul i are bitul j
  34. x[x.size() - 1] += p[j];
  35. }
  36.  
  37. for (int i = 0; i < (1 << ny); i++)
  38. {
  39. y.push_back(0);
  40. for (int j = 0; j < ny; j++)
  41. if ((1 << j) & i)
  42. y[y.size() - 1] += p[nx + j];
  43. }
  44.  
  45. sort(x.begin(), x.end());
  46. sort(y.begin(), y.end());
  47.  
  48. int res = 0;
  49. for (int i = 0; i < x.size(); i++)
  50. {
  51. int l = 0, r = y.size() - 1, m, pos = 0;
  52. while (l <= r)
  53. {
  54. m = (l + r) / 2;
  55. if (x[i] + y[m] <= T)
  56. {
  57. pos = m;
  58. l = m + 1;
  59. }
  60. else
  61. r = m - 1;
  62. }
  63.  
  64. if (x[i] <= T)
  65. res += pos + 1;
  66. }
  67.  
  68.  
  69. fout << res - 1;
  70. fin.close();
  71. fout.close();
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement