#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
int maxOR = 0;
int count = 0;
vector<int> subset;
void solve(const vector<int>& nums, int index, int currentOR) {
if (index >= nums.size()) {
if (currentOR == maxOR)
count++;
return;
}
// Do:
subset.push_back(nums[index]);
solve(nums, index + 1, currentOR | nums[index]);
// undo:
subset.pop_back();
// recurse:
solve(nums, index + 1, currentOR);
}
int countMaxOrSubsets(vector<int>& nums) {
maxOR = 0;
count = 0;
for(int i = 0; i < nums.size(); i++)
maxOR |= nums[i];
solve(nums, 0, 0);
return count;
}
};
int main() {
Solution s;
vector<int> nums = {3,1};
cout << "Count of subsets: " << s.countMaxOrSubsets(nums) << endl;
return 0;
}
CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIFNvbHV0aW9uIHsKcHVibGljOgogICAgaW50IG1heE9SID0gMDsgIAogICAgaW50IGNvdW50ID0gMDsgIAogICAgdmVjdG9yPGludD4gc3Vic2V0OyAKCiAgICB2b2lkIHNvbHZlKGNvbnN0IHZlY3RvcjxpbnQ+JiBudW1zLCBpbnQgaW5kZXgsIGludCBjdXJyZW50T1IpIHsKICAgICAgICBpZiAoaW5kZXggPj0gbnVtcy5zaXplKCkpIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnRPUiA9PSBtYXhPUikgCiAgICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyBEbzogCiAgICAgICAgc3Vic2V0LnB1c2hfYmFjayhudW1zW2luZGV4XSk7ICAKICAgICAgICBzb2x2ZShudW1zLCBpbmRleCArIDEsIGN1cnJlbnRPUiB8IG51bXNbaW5kZXhdKTsgCiAgICAgICAgCiAgICAgICAgLy8gdW5kbzoKICAgICAgICBzdWJzZXQucG9wX2JhY2soKTsKCiAgICAgICAgLy8gcmVjdXJzZTogCiAgICAgICAgc29sdmUobnVtcywgaW5kZXggKyAxLCBjdXJyZW50T1IpOwogICAgfQoKICAgIGludCBjb3VudE1heE9yU3Vic2V0cyh2ZWN0b3I8aW50PiYgbnVtcykgewogICAgICAgIG1heE9SID0gMDsKICAgICAgICBjb3VudCA9IDA7CiAgICAgICAKCiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bXMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgIG1heE9SIHw9IG51bXNbaV07IAoKICAgICAgICBzb2x2ZShudW1zLCAwLCAwKTsgCgogICAgICAgIHJldHVybiBjb3VudDsKICAgIH0KfTsKCmludCBtYWluKCkgewogICAgU29sdXRpb24gczsKICAgIHZlY3RvcjxpbnQ+IG51bXMgPSB7MywxfTsgIAogICAgY291dCA8PCAiQ291bnQgb2Ygc3Vic2V0czogIiA8PCBzLmNvdW50TWF4T3JTdWJzZXRzKG51bXMpIDw8IGVuZGw7CiAgICByZXR1cm4gMDsKfQo=