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;
}
相关推荐
chenbingjie_c16 小时前
C++ 模板进阶:从 “会用“ 到 “懂底层“(非类型参数・特化・分离式编译)
c++·后端
world781122616 小时前
【C++】set 和 map
java·前端·c++·set·map
lunar_coder16 小时前
哈希扩展 -- 位图思想
c++·算法·哈希算法
kiracrimson17 小时前
编码简述:内存里没有文字,只有一张对照表
开发语言·c++·二进制·计算机组成原理
磊磊cpp18 小时前
CRC8 校验原理与实现详解(附可交互动画演示)
c++·交互
Mortalbreeze18 小时前
0 - 1 BFS 算法详解:从基本原理到经典题目建模
数据结构·c++·算法·图论·宽度优先
进化中的刀盾兽20 小时前
从零实现 C++ Json-Rpc(十):把消息交给真实连接——MuduoConnection 与 ConnectionFactory
c++·rpc
青瓦梦滋1 天前
WebSocket协议
linux·服务器·网络·c++·websocket·网络协议·http
CodeYp20191 天前
第15讲:二叉搜索树
开发语言·c++·二叉搜索树