// Online C++ compiler to run C++ program online
#include <iostream>
#include <vector>
#include <cmath>
using namespace std ;
class Solution
{
public:
int maxOR;
int Count;
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 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;
}
Ly8gT25saW5lIEMrKyBjb21waWxlciB0byBydW4gQysrIHByb2dyYW0gb25saW5lCiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGNtYXRoPgp1c2luZyBuYW1lc3BhY2Ugc3RkIDsKY2xhc3MgU29sdXRpb24gCnsKcHVibGljOgogICAgaW50IG1heE9SOyAKICAgIGludCBDb3VudDsKIAogICAgdm9pZCBzb2x2ZShjb25zdCB2ZWN0b3I8aW50PiYgbnVtcywgaW50IGluZGV4LCBpbnQgY3VycmVudE9SKQogICAgewogICAgICAgIGlmIChpbmRleCA+PSBudW1zLnNpemUoKSkgewogICAgICAgICAgICBpZiAoY3VycmVudE9SID09IG1heE9SKSAgIAogICAgICAgICAgICAgICAgQ291bnQrKzsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAvLyB0YWtlCiAgICAgICAgc29sdmUobnVtcywgaW5kZXggKyAxLCBjdXJyZW50T1IgfCBudW1zW2luZGV4XSk7CiAgICAgICAgLy8gbGVhdmUKICAgICAgICBzb2x2ZShudW1zLCBpbmRleCArIDEsIGN1cnJlbnRPUik7CiAgICB9CiAKICAgIGludCBjb3VudE1heE9yU3Vic2V0cyh2ZWN0b3I8aW50PiYgbnVtcykKICAgIHsKICAgICAgICBtYXhPUiA9IDA7CiAgICAgICAgQ291bnQgPSAwOwogCiAgICAgICAgZm9yIChpbnQgbnVtIDogbnVtcykKICAgICAgICAgICAgbWF4T1IgfD0gbnVtOwogCiAgICAgICAgc29sdmUobnVtcywgMCwgMCk7CiAKICAgICAgICByZXR1cm4gQ291bnQ7CiAgICB9Cn07CiAKaW50IG1haW4oKSB7CiAgICBTb2x1dGlvbiBzb2w7CiAgICB2ZWN0b3I8aW50PiBudW1zID0gezIsMiwyfTsKICAgIGNvdXQgPDwgIkNvdW50IG9mIG1heCBPUiBzdWJzZXRzOiAiIDw8IHNvbC5jb3VudE1heE9yU3Vic2V0cyhudW1zKSA8PCBlbmRsOwogICAgcmV0dXJuIDA7Cn0=