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;
}
相关推荐
tankeven27 分钟前
HJ92 在字符串中找出连续最长的数字串
c++·算法
艾莉丝努力练剑31 分钟前
【Linux:文件】进程间通信
linux·运维·服务器·c语言·网络·c++·人工智能
梦游钓鱼35 分钟前
C++指针深度解析:核心概念与工业级实践
开发语言·c++
枫叶丹42 小时前
【Qt开发】Qt界面优化(五)-> Qt样式表(QSS) 子控件选择器
c语言·开发语言·数据库·c++·qt
xiaoye-duck2 小时前
《算法题讲解指南:优选算法-双指针》--01移动零,02复写零
c++·算法
额,不知道写啥。3 小时前
P5314 ODT(毒瘤树剖)
数据结构·c++·算法
Once_day3 小时前
GCC编译(4)构造和析构函数
c语言·c++·编译和链接
今儿敲了吗3 小时前
24| 字符串
数据结构·c++·笔记·学习·算法
橘色的喵3 小时前
嵌入式 Telnet 调试 Shell 重构: 纯 POSIX 轻量化实现
c++
橘色的喵3 小时前
ztask: 一个C++14编写的、 类型安全、RAII 与模板化任务调度器
c++