int countTriplets(vector<int>& A) {
        static const int k = 3;
        const auto max_A = *max_element(A.cbegin(), A.cend());
        int n = 1;
        for (; n <= max_A; n <<= 1);
        vector<int> B(n); 
        for (const auto& x : A) {
            ++B[x];
        }

        FWT(&B, 1);
        for(auto& x : B) {
            x = pow(x, k);
        }
        FWT(&B, -1);

        return B[0];
    }
Beispiel #2
0
int main()
{
	scanf("%d", &n);
	++f[0];
	for(int i = 1; i <= n; ++i)
	{
		scanf("%d", a + i);
		++f[a[i] ^= a[i - 1]];
	}
	FWT(f, maxs, 1);
	for(int i = 0; i < maxs; ++i)
		f[i] *= f[i];
	FWT(f, maxs, -1);
	f[0] -= n + 1;
	for(int i = 1; i < maxs; ++i)
		if(f[id] < f[i])
			id = i;
	printf("%d %lld\n", id, f[id] >> 1);
	return 0;
}