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;
}
相关推荐
zwenqiyu7 小时前
P5283 [十二省联考 2019] 异或粽子题解
c++·学习·算法
Queenie_Charlie7 小时前
哈夫曼树
数据结构·c++·哈夫曼树
lihao lihao8 小时前
Linux信号
开发语言·c++·算法
大白话_NOI8 小时前
【洛谷 P2249】查找(深基 13. 例 1)+ 详细分析
c++·算法
智者知已应修善业8 小时前
【51单片机2个外部中断显示中断历时,初始化8左移3位共阳数码管】2024-6-6
c++·经验分享·笔记·算法·51单片机
码之气三段.8 小时前
edu158-B
c++
青梅橘子皮9 小时前
Linux---进程控制(2)(进程程序替换)
linux·c++·算法
chase_my_dream9 小时前
A-LOAM中scanRegistration.cpp详细讲解
c++·人工智能·自动驾驶
王老师青少年编程9 小时前
2022年CSP-X复赛真题及题解(T1:独木桥)
c++·真题·csp·信奥赛·复赛·独木桥·csp-x
John_ToDebug10 小时前
Chromium 132→148 升级实战:Legacy IPC 消息丢失问题深度解析
c++·chrome·ai·架构