#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
int maxOR = 0;
int count = 0;
void solve(const vector<int>& nums, int index, int currentOR) {
if (index >= nums.size()) {
if (currentOR == maxOR)
count++;
return;
}
// take
solve(nums, index + 1, currentOR | nums[index]);
// leave
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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgU29sdXRpb24gewpwdWJsaWM6CiAgICBpbnQgbWF4T1IgPSAwOyAgCiAgICBpbnQgY291bnQgPSAwOyAgCgogICAgdm9pZCBzb2x2ZShjb25zdCB2ZWN0b3I8aW50PiYgbnVtcywgaW50IGluZGV4LCBpbnQgY3VycmVudE9SKSB7CiAgICAgICAgaWYgKGluZGV4ID49IG51bXMuc2l6ZSgpKSB7CiAgICAgICAgICAgIGlmIChjdXJyZW50T1IgPT0gbWF4T1IpIAogICAgICAgICAgICAgICAgY291bnQrKzsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLy8gdGFrZQogICAgICAgIHNvbHZlKG51bXMsIGluZGV4ICsgMSwgY3VycmVudE9SIHwgbnVtc1tpbmRleF0pOwoKICAgICAgICAvLyBsZWF2ZQogICAgICAgIHNvbHZlKG51bXMsIGluZGV4ICsgMSwgY3VycmVudE9SKTsKICAgIH0KCiAgICBpbnQgY291bnRNYXhPclN1YnNldHModmVjdG9yPGludD4mIG51bXMpIHsKICAgICAgICBtYXhPUiA9IDA7CiAgICAgICAgY291bnQgPSAwOwoKICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtcy5zaXplKCk7IGkrKykKICAgICAgICAgICAgbWF4T1IgfD0gbnVtc1tpXTsgCgogICAgICAgIHNvbHZlKG51bXMsIDAsIDApOwoKICAgICAgICByZXR1cm4gY291bnQ7CiAgICB9Cn07CgppbnQgbWFpbigpIHsKICAgIFNvbHV0aW9uIHM7CiAgICB2ZWN0b3I8aW50PiBudW1zID0gezMsMX07ICAKICAgIGNvdXQgPDwgIkNvdW50IG9mIHN1YnNldHM6ICIgPDwgcy5jb3VudE1heE9yU3Vic2V0cyhudW1zKSA8PCBlbmRsOwogICAgcmV0dXJuIDA7Cn0K