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\) 倍...)
应该没有什么给代码的必要了吧...

posted @ 2020-02-06 14:01  Aehnuwx  阅读(137)  评论(0编辑  收藏  举报