题解:AT_arc050_b [ARC050B] 花束
tangtianyao0123
·
·
题解
这个变量名就不是个东西,害得我 WA 的好惨(记得加半角空格)。。。
其实我建议你们可以只是把洛谷当成翻译,毕竟样例都没有。。。
洛谷,AT。
直接求一点都不好求,我们考虑二分答案,考虑做 k 束花时,我们设第一种花束 m 个,第二种花束 n 个,则 m + n = k。
那么就需要 mx + n 朵红花,m + ny 朵黄花,那么可以列出以下方程(不等式):
\begin{cases}
m + n = k \\
mx + n \le r \\
m + ny \le b \\
m, n \in \N
\end{cases}
然后你就不会解了。
小学解二元一次方程的时候,老师告诉过我们核心思路就是消元,实在不知道怎么消,我们就将 y 用含 x 的式子表示,然后代入。
这道题我们可以用同样的想法,将 n 变为 k - m,那么第一个式子就变成了 mx + k - m \le r,就是 m(x - 1) \le r - k。
用我们小学就学过的解不等式,我们知道 m \le \frac{r - k}{x - 1}。同理 n \le \frac{b - k}{y - 1}。
又 m + n = k,所以 \left[\frac{r - k}{x - 1}\right] + \left[\frac{b - k}{y - 1}\right] \ge k,那么 Check 函数就写完了。
还有一个坑点! 如果你引用题目的变量名作为代码变量名,那么二分的时候千万别用 l, r 作为下界和上界,否则你将喜提 WA \times 55。还有,不开 ____ 见祖宗。
你们最喜欢的代码环节。