比赛链接
C - Cat virus
对于一颗树, 它的节点可以被染为黑色或者白色. 如果一个节点是白色,那么她的子节点可以是白色,也可以是黑色. 如果这个节点是黑色, 那么她的子节点一定是黑色. 现在输入一个数字 2≤K≤2×1018, 根据上述方式构造一棵数, 使之不同的染色方式有 K 种
思维
构造
刚开始做的时候没带脑子,直接构造了一个 (1,2),(2,3)…(n−1,n),结果狠狠的 TLE
反向思考,当 x 为白色的时候,它的父节点一定也为白色,而当这个节点是黑色的时候,它的父节点可以是白色,也可以是黑色.
设节点 a 及其子树有 n 中染色方式, 增加一节点 b 连接到 a, 有以下情况:
- 当 a 为黑色时, 所有节点都为黑色, 1 种染色方式
- 当 a 为白色, b 为黑色时, 有 n−1 中染色方式
- 当 a 为白色, b 为白色时, 有 n−1 中染色方式
即向一个 n 种渲染方式的节点中添加一个节点, 会使其变为 2n−1 种染色方式.
因此我们可以构造一个树,目的是使其有 K 中染色方式,当其减少最后一次添加的节点时应该有 2K+1 种或者 K−1 染色方式,因此只需要进行深度搜索,每次搜索时判断数字的奇偶性即可.
D - Dyson Box
在一个二维的格子中,每轮在指定位置放入一个方块, 方块会在向左的重力和向下的重力下移动. 每轮在方块移动后输出所有方块围成的总周长.
思维
由于 n 取到 2e5, 很明显不能使用模拟.
实际上由于方块只会进行一次移动操作,我们可以不移动方块,而是统计每个方块的贡献值.
G - Grade Point Average
给出科目数量和精确到的小数位数,输出平均分数
高精
H - Adventurer’s Guild
Yuna 拥有 H 点血量和 S 点体力. 现在有 n 个怪物, 每个怪物需要消耗 Yuna hi 点血量和 si 点体力才能被击败, 同时 Yuna 能获得 wi 点金币. 当 Yuna 的体力归零后消耗体力会减少对应数量的血量. 输出 Yuna 所能获得的最大金币数量
01 背包
像 01 背包变形
递推公式:
f(i,H,S)=⎩⎨⎧maxf(i−1,H,S),f(i−1,H−hi,S−si)+wi,S≥simaxf(i−1,H,S),f(i−1,H−hi−(si−S),0)+wi,S<si
不过我们需要进行压维, 由于每个怪物只能打一次, 需要让 H 和 S 倒序循环
M - Matrix Problem
给出一个 01 矩阵 C, 构造矩阵 A 和 B. 要求矩阵 A 和 B 的与运算结果为 C, 且 A 和 B 中的 1 互相联通
思维
如果在 C 的对应位置为 1, 则填充1,否则 A 填充奇数行和最左侧一列, B 填充偶数行和最右侧一列.