1 条题解
-
0
题解:偶校验位
思路
对每个数不断检查最低位:
x & 1得到最低位;x >>= 1删除最低位。
只需要记录
1的总数是奇数还是偶数,不必保存完整计数。最后若总数为奇数,输出1;否则输出0。也可以使用
__builtin_popcount,但手写循环更能体现位运算过程。复杂度
每个数最多处理 位,时间复杂度 ,即 ;空间复杂度 。
参考代码
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; int p = 0; for (int i = 0; i < n; i++) { unsigned int x; cin >> x; while (x > 0) { p ^= (x & 1u); x >>= 1; } } cout << p << "\n"; return 0; }
- 1
信息
- ID
- 5113
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 7
- 标签
- 递交数
- 21
- 已通过
- 7
- 上传者
粤公网安备44195502000195号