P3917 异或序列

题目链接

按位考虑,计算有多少个区间异或值使得该位为1,因为该位为1才有贡献。

对每一位异或前缀,记录1,0的个数,易知最终结果是01的个数相乘。

cpp 复制代码
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
	
	int n;
	cin >> n;

	vector<int> a(n);
	for (int i = 0; i < n; i++) {
		cin >> a[i];
	}    

	ll ans = 0;
	for (int i = 0; i < 30; i++) {
		int cnt[2]{1, 0};   //单独的1也有贡献,所以0的个数初始化为1
		int x = 0;

		for (int j = 0; j < n; j++) {
			x ^= a[j] >> i & 1;
			cnt[x]++;
		}
		ans += 1LL * cnt[0] * cnt[1] * (1 << i);
	}

	cout << ans << "\n";

    return 0;
}
相关推荐
blueman88886 小时前
Qt5通过vcpkg中调用时,在debug模式下调试时总是调用release的plugins文件夹中的dll
c++·qt·cmake
jinyishu_8 小时前
C++ string使用方法
开发语言·c++
乐观勇敢坚强的老彭9 小时前
C++浮点数使用注意事项
开发语言·c++
库克克9 小时前
【C++ 】内联函数
java·开发语言·c++
盐焗鹌鹑蛋9 小时前
【C++】红黑树
c++
aaPIXa62211 小时前
C++采样引导优化SPGO——比PGO更智能的编译器决策新方案
java·c++·人工智能
Starmoon_dhw12 小时前
题解:P17078 夏日甜点
c++·学习·算法·图论
某不知名網友12 小时前
C/C++动态内存管理,智能指针及RAlI思想。
java·c语言·c++
hold?fish:palm13 小时前
从源码到可执行文件:C++程序的编译过程
开发语言·c++
lingran__13 小时前
C++_STL简介
开发语言·c++