kick start 2019 round G
本轮是今年的倒数第二轮,也是相对比较简单的一个轮次。
我做出了第3题和1 2题的小数据集。第二题我本身的算法是对的,但是没有正确的评估最大的k的位数,并防止溢出操作,所以字大数据集上WA。第一题其实本身不难,只是我对约数不很敏感,导致错失没有想出更好的解法。总的来说,本轮是我最接近AC的轮次,运气相对不错,也提前1个小时完成了比赛。因为后来实在想不出解法 和 要注意的点了,就放弃了。
Book Reading
暴力法加memo可以直接过。可以我的记忆化写错了,忘记记忆了。导致TLE,损失了不少分数,太可惜 了。
另外,能用long long就不要用int。否则最后的ans会溢出。
时间复杂度: O(N log (N)).
因为记忆化 的存在,计算的页数最多是1 + 1 / 2 + 1 / 3 + ... + 1 / N = log N, 即调和级数。
1 |
|
The Equation
本题要注意的点相对比较多,本身算法并不难。
- long long 常数是
1L。否则1默认 是int,会有溢出风险。 - 我们不能从A中的最高位开始找,因为可能k会是更大的数。而应该从 M的角度考虑k的最大值,这里M是15位的,对应二进制50位。然而,我们同样不能从太高的位开始找,否则
N*( 1<<i )会溢出64位。鉴于N最大是1000,二进制10位。我们可以从50~53位开始找。
因为要最大化k,所以我们可以使用贪心的思路,从高位向低位数,尽量放置1,否则放置0,超过要求回溯。




