Skip to content

FWT求三个集合异或的不同个数 ​

复杂度O(Vlog⁡V)O(V \log V)

cpp
class Solution {
public:
    int uniqueXorTriplets(vector<int>& nums) {
        int mx=*max_element(nums.begin(),nums.end());
        init(mx);
        vector<long long> A(n),B(n);
        for(auto x:nums)A[x]=1,B[x]=1;
        fwt_xor(A);
        for(int i=0;i<n;i++)A[i]=A[i]*A[i]%mod;
        fwt_xor(B);
        for(int i=0;i<n;i++)A[i]=A[i]*B[i]%mod;
        ifwt_xor(A);
        int ans=0;
        for(int i=0;i<n;i++){
            if(A[i])ans++;
        }
        return ans;
    }
};