CF1296B - Food Buying 题解
官方题解给出的是 \(O(t\log s)\) 的解法,但实际上我们可以做到单次查询 \(O(1)\) 的 \(O(t)\) 做法.
同样是贪心,可以看出,我们每次花费 \(10\) 显然可以做到花费钱数最大化.
故 \(\mathbf{ans}= \begin{cases} \lfloor \dfrac{s}{9} \rfloor \times 10 +s\bmod 9-1,9|s \\ \lfloor \dfrac{s}{9} \rfloor \times 10 +s\bmod 9, \rm Otherwise \end{cases}\)
为什么在 \(9|s\) 的时候需要最后减去一个 \(1\) 呢?因为此时在最后一次操作时 \(s\) 仅会剩下 \(9\),如果仍然用 \(\lfloor \dfrac{s}{9} \rfloor \times 10 +s\bmod 9\) 的话答案就会多出 \(1\),所以要将这个 \(1\) 减掉.
(然而可以用 \(s+\lfloor \dfrac{s-1}{9} \rfloor\) 或 \(\lfloor \dfrac{10s}{9} \rfloor\),比我写的强 \(100\) 倍...)
应该没有什么给代码的必要了吧...
转载是允许的,但是除了博主同意的情况下,必须在文章的明显区域说明出处,否则将会追究其法律责任。