- 汉明码的精髓在于,既然你无法分辨更改检验位的情况,就把检验位放到冲突的位置,消掉那一位
- 位运算的性质:a+b=(a|b+a&b) \(a\oplus b\oplus 0\)+\(a\oplus b\oplus (111…11)\)=111…11
- 其实D题才是最简单的题目,比赛的整体难度低于省赛,明年还参加的话开场或许可以考虑和队友分工
- 增进了对枚举二进制数位的熟练程度,下次遇到或许可以直接写搜索
- multiset容器、set::iterator it、s.erase(it)(删除一个数)、s.erase(*it)(删除所有数)、时刻注意STL容器非空
- 时刻保持理智,该分步调试的时候就要分步调试
- 将两个抽象的“基础坐标操作”组合成一个形象的“进阶坐标操作”、可行性构造
- 减法就是特殊的加法,奇偶性结论一致
- popcount:二进制数1的个数
- 你找到的规律:
- 1
- 1 2
- 1 2 2 3
- 1 2 2 3 2 3 3 4
- ……
- 其实就是数的popcount(仔细想一想,所谓的“复制后加1”,不是和二进制进位很相似吗?)
补充:构造汉明权重递增的排列
点击查看代码
for (int i = 0; (1<<i)-1 <= n; i++) {
for (int x = (1<<i)-1, t; x <= n; t = x+(x&-x), x = x ? (t|((((t&-t)/(x&-x))>>1)-1)) : (n+1)) {
// 写下需要完成的操作
}
}