题解 CF65A 【Harry Potter and Three Spells】

· · 题解

CF的难度真的锅很严重

安利下窝的博客

这道题属于初一年级第九章不等式与不等式组的范围。依题意,如果 1 单位的沙子经过一番毒瘤的转换能够变成 1+ 单位的沙子,那么金山无限。

下面进行推导:

沙子兑换铅的倍率是 \dfrac{a}{b}, 也就是说换完后质量会变为 a\div\dfrac{a}{b}=b 单位。

同理,铅兑换金子的倍率是 \dfrac{c}{d},金子再换沙子的倍率是 \dfrac{e}{f}

那么,沙子换回沙子的倍率就是

\dfrac a b\cdot\dfrac c d\cdot\dfrac e f=\dfrac{ace}{bdf} \qquad(b,d,f\ne 0)

由于我们希望越换越多,所以我们希望这个比率比 1 小,这是因为一个数除以一个比他小的数会变得比他自己更大

\therefore ace<bdf\qquad(b,d,f\ne0)

然而,我们把这个判断提交上去的时候……没错,你看到了红彤彤的 WA。

原因?

The first line contains 6 integers a , b , c , d , e , f (0 \le a,b,c,d,e,f \le 1000)

没看出来?

The first line contains 6 integers a , b , c , d , e , f

\large{0 \le a,b,c,d,e,f \le 1000}

看出来了吗?之前的运算都是基于 b,d,f\ne 0 的。

当然这也不赖大家,应该赖那个非常不靠谱的毒瘤生草员,这里吐槽一下,他翻译成了 a,b,c,d,e,f \le 1000……

这告诫我们 要学好嘤语,而且不要见到嘤文题就疯狂滚轮到翻译。

那么我们就要加一些特判:

  1. 如果铅不能换出金子,即 d = 0 时,一定不能换出金子,所以一切特判的先决条件都是 d \ne 0

  2. 如果沙子能换出无限量的铅,即 0 单位的沙子能换出非零量的铅,金子会越换越多。总结为式子就是:

    a=0 , b \ne 0

    用编程逻辑表达:

    !a && b         //若a不为0,则 !a 为0
  3. 如果铅能换出无限量的金子,即 c=0 时,能换出无限量的金子。用编程逻辑表达:

    !c

加上这些特判就能得满分了。

AC\ Code:
#include <stdio.h>
int a,b,c,d,e,f;
int main(void) {
    scanf("%d %d %d %d %d %d",&a,&b,&c,&d,&e,&f);
    if(d && (a*c*e<b*d*f || (!a && b) || (!c))) puts("Ron");
    else puts("Hermione");
    return 0;
}

个人认为是写的最详尽的一篇。

完结撒花~