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;
}
相关推荐
ouliten6 小时前
C++笔记:std::numeric_limits
c++·笔记
承渊政道7 小时前
C++学习之旅【C++伸展树介绍以及红黑树的实现】
开发语言·c++·笔记·b树·学习·visual studio
郭涤生7 小时前
C++中设置函数与回调函数设值的性能差异及示例
开发语言·c++
mjhcsp7 小时前
C++ 爬山算法(Hill Climbing):局部搜索(Local Search)的核心解析
c++·爬山算法
柏木乃一7 小时前
Linux线程(7)基于策略模式的日志模块
linux·运维·服务器·c++·线程·策略模式
TrueDei7 小时前
linux-C/C++主子进程同时占用主进程文件描述符问题
linux·c语言·c++
仰泳的熊猫7 小时前
题目2266:蓝桥杯2015年第六届真题-打印大X
数据结构·c++·算法·蓝桥杯
cui_ruicheng7 小时前
C++ 数据结构:AVL树原理与实现
数据结构·c++
小龙报7 小时前
【数据结构与算法】环与相遇:链表带环问题的底层逻辑与工程实现
c语言·数据结构·c++·物联网·算法·链表·visualstudio
mmz12078 小时前
贪心算法(c++)
c++·贪心算法