// 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;
}
Ly8gT25saW5lIEMrKyBjb21waWxlciB0byBydW4gQysrIHByb2dyYW0gb25saW5lCiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGNtYXRoPgp1c2luZyBuYW1lc3BhY2Ugc3RkIDsKY2xhc3MgU29sdXRpb24gCnsKcHVibGljOgogICAgaW50IG1heE9SOyAKICAgIGludCBDb3VudDsKCiAgICB2b2lkIHNvbHZlKGNvbnN0IHZlY3RvcjxpbnQ+JiBudW1zLCBpbnQgaW5kZXgsIGludCBjdXJyZW50T1IpCiAgICB7CiAgICAgICAgaWYgKGluZGV4ID49IG51bXMuc2l6ZSgpKSB7CiAgICAgICAgICAgIGlmIChjdXJyZW50T1IgPT0gbWF4T1IpICAgCiAgICAgICAgICAgICAgICBDb3VudCsrOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIC8vIHRha2UKICAgICAgICBzb2x2ZShudW1zLCBpbmRleCArIDEsIGN1cnJlbnRPUiB8IG51bXNbaW5kZXhdKTsKICAgICAgICAvLyBsZWF2ZQogICAgICAgIHNvbHZlKG51bXMsIGluZGV4ICsgMSwgY3VycmVudE9SKTsKICAgIH0KCiAgICBpbnQgY291bnRNYXhPclN1YnNldHModmVjdG9yPGludD4mIG51bXMpCiAgICB7CiAgICAgICAgbWF4T1IgPSAwOwogICAgICAgIENvdW50ID0gMDsKCiAgICAgICAgZm9yIChpbnQgbnVtIDogbnVtcykKICAgICAgICAgICAgbWF4T1IgfD0gbnVtOwoKICAgICAgICBzb2x2ZShudW1zLCAwLCAwKTsKCiAgICAgICAgcmV0dXJuIENvdW50OwogICAgfQp9OwoKaW50IG1haW4oKSB7CiAgICBTb2x1dGlvbiBzb2w7CiAgICB2ZWN0b3I8aW50PiBudW1zID0gezIsMiwyfTsKICAgIGNvdXQgPDwgIkNvdW50IG9mIG1heCBPUiBzdWJzZXRzOiAiIDw8IHNvbC5jb3VudE1heE9yU3Vic2V0cyhudW1zKSA8PCBlbmRsOwogICAgcmV0dXJuIDA7Cn0K