fork download
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. class Solution {
  6. public:
  7. int maxOR = 0;
  8. int count = 0;
  9.  
  10. void solve(const vector<int>& nums, int index, int currentOR) {
  11. if (index >= nums.size()) {
  12. if (currentOR == maxOR)
  13. count++;
  14. return;
  15. }
  16.  
  17. // take
  18. solve(nums, index + 1, currentOR | nums[index]);
  19.  
  20. // leave
  21. solve(nums, index + 1, currentOR);
  22. }
  23.  
  24. int countMaxOrSubsets(vector<int>& nums) {
  25. maxOR = 0;
  26. count = 0;
  27.  
  28. for(int i = 0; i < nums.size(); i++)
  29. maxOR |= nums[i];
  30.  
  31. solve(nums, 0, 0);
  32.  
  33. return count;
  34. }
  35. };
  36.  
  37. int main() {
  38. Solution s;
  39. vector<int> nums = {3,1};
  40. cout << "Count of subsets: " << s.countMaxOrSubsets(nums) << endl;
  41. return 0;
  42. }
  43.  
Success #stdin #stdout 0.01s 5288KB
stdin
Standard input is empty
stdout
Count of subsets: 2