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;
}
相关推荐
凯瑟琳.奥古斯特18 小时前
二分查找解力扣1011最优运载能力
开发语言·c++·算法·leetcode·职场和发展
WZF-Sang18 小时前
TCP和UDP协议
linux·服务器·网络·c++·学习·tcp/ip·udp
Tim_1018 小时前
【C++】014、左值与右值的区别
开发语言·c++
想人陪的玫瑰18 小时前
winform 能用 Native AOT 吗?——TDS 项目的实战尝试
c++·mfc
^yi19 小时前
【C++】类和对象(全)
开发语言·c++
我不是懒洋洋19 小时前
从零实现一个API网关:Kong的核心设计
c++
2301_7779983419 小时前
C++异常处理
c++
Dovis(誓平步青云)19 小时前
《C/C+++ Boost 轻量级搜索引擎实战:架构流程、技术栈与工程落地指南——HTML文件的清洗(上篇)》
开发语言·数据库·c++·搜索引擎·开源
布朗克16819 小时前
Go 入门到精通-13-指针与内存
开发语言·c++·golang·指针与内存
问君能有几多愁~1 天前
C++ 数据结构复习笔记
数据结构·c++·笔记