C. Divan and bitwise operations

C. Divan and bitwise operations

问题:有一个长度为\(n\)的数组,有\(m\)个连续区间\(xor\)的值,每个数至少在\(m\)个区间中出现一次,问这个数组所有子序列的\(xor\)的和为多少?

思路:所有的\(xor\)的值进行与运算就是整个数组的所有元素的\(xor\)值,假设为\(x\)\(x\)的二进制中所有为\(1\)的位置为\(i\)的地方都会产生$qmi(2, i,mod) * qmi(2, n - 1, mod) $ \(\%\) \(mod\)的贡献。

代码:

void solve()
{
	LL ans = 0;
	cin >> n >> m;
	for(int i = 1; i <= m; i ++ ){
		cin >> l >> r >> x;
		ans |= x;
	}
	string s = binary(ans);
	LL qwq = 0;
	// debug(ans);
	for(int i = 0; i < sz(s); i ++ ){
		qwq = (qwq + (s[i] - '0') * qmi(2, i, mod) * qmi(2, n - 1, mod)) % mod;
	}
	cout << qwq << endl;
}
posted @ 2022-03-21 20:18  合肥学院王星力  阅读(42)  评论(0)    收藏  举报