#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
int maxOR;
int Count;
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]); // recurse
// undo:
subset.pop_back();
solve(nums, index + 1, currentOR);
}
int countMaxOrSubsets(vector<int>& nums) {
maxOR = 0;
Count = 0;
subset.clear();
for (int num : nums)
maxOR |= num;
solve(nums, 0, 0);
return Count;
}
};
int main() {
Solution sol;
vector<int> nums = {2, 2, 2};
cout << "Count of max OR subsets: " << sol.countMaxOrSubsets(nums) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgU29sdXRpb24gewpwdWJsaWM6CiAgICBpbnQgbWF4T1I7IAogICAgaW50IENvdW50OwogICAgdmVjdG9yPGludD4gc3Vic2V0OwoKICAgIHZvaWQgc29sdmUoY29uc3QgdmVjdG9yPGludD4mIG51bXMsIGludCBpbmRleCwgaW50IGN1cnJlbnRPUikgewogICAgICAgIGlmIChpbmRleCA+PSBudW1zLnNpemUoKSkgewogICAgICAgICAgICBpZiAoY3VycmVudE9SID09IG1heE9SKSAgIAogICAgICAgICAgICAgICAgQ291bnQrKzsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLy8gRG86IAogICAgICAgIHN1YnNldC5wdXNoX2JhY2sobnVtc1tpbmRleF0pOyAKICAgICAgICBzb2x2ZShudW1zLCBpbmRleCArIDEsIGN1cnJlbnRPUiB8IG51bXNbaW5kZXhdKTsgLy8gcmVjdXJzZQoKICAgICAgICAvLyB1bmRvOgogICAgICAgIHN1YnNldC5wb3BfYmFjaygpOwoKICAgICAgICBzb2x2ZShudW1zLCBpbmRleCArIDEsIGN1cnJlbnRPUik7CiAgICB9CgogICAgaW50IGNvdW50TWF4T3JTdWJzZXRzKHZlY3RvcjxpbnQ+JiBudW1zKSB7CiAgICAgICAgbWF4T1IgPSAwOwogICAgICAgIENvdW50ID0gMDsKICAgICAgICBzdWJzZXQuY2xlYXIoKTsgCiAgICAgICAgZm9yIChpbnQgbnVtIDogbnVtcykKICAgICAgICAgICAgbWF4T1IgfD0gbnVtOyAgCgogICAgICAgIHNvbHZlKG51bXMsIDAsIDApOyAKCiAgICAgICAgcmV0dXJuIENvdW50OwogICAgfQp9OwoKaW50IG1haW4oKSB7CiAgICBTb2x1dGlvbiBzb2w7CiAgICB2ZWN0b3I8aW50PiBudW1zID0gezIsIDIsIDJ9OwogICAgY291dCA8PCAiQ291bnQgb2YgbWF4IE9SIHN1YnNldHM6ICIgPDwgc29sLmNvdW50TWF4T3JTdWJzZXRzKG51bXMpIDw8IGVuZGw7CiAgICByZXR1cm4gMDsKfQoKICAK