Codeforces Round 857 (Div. 2)
C
构造题要自己给自己添加条件
如此题可以假设可以每个数都不同,异或和为 0
然后如果想要异或和为 0,可以让一行都有一个 bit,一列都有一个 bit
为了数字不一样,可以采取只有当前行(列)二进制有 bit 这一位才刷上这一个 bit
此题也可以假设异或和为任意数字,然后随机初始化一行一列,再递推其他值,如果有重复值,就再次重来,显然这种方法简单得多
这种思想先随机初始化,再 dp
D
- debug 能力差
- 漏了一种特殊情况 0 的特判
- 倍增树状数组不熟悉
- 可以用 multiset 维护的操作,却自己用权值树状数组实现 :)
- erase 会删除所有节点,所以 multiset 用
s.erase(s.find(x))
保证 x 存在 - set 的迭代器只支持 ++ 操作,不支持 + 1
- 此题是由简单到复杂思想的典型应用,先思考一个节点,再扩展到多个节点
E
D 题 debug 太久,这题刚好写完 :)
200000 级别的 multi case,不要随意用 memset!!应该在输入数据时根据数据规模初始化
我使用了 权值树状数组优化 dp $log^2 n$ 级别
树状数组维护不可逆信息还不熟练
步骤是先枚举所影响到的父集,再枚举父元素的直系儿子更新(首先将自己设为所在元素的大小,否则丢失信息,所以原数组的信息也要维护)
也可以写权值线段树 $logn$ 级别
去除无用数字思想
dp 设计
F
- 推迟思想,当钱不够了,就可以向路径上最大表演利益的点选择表演
Codeforces Round 857 (Div. 2)
https://lllei.top/2023/03/15/contest0/