B3754 [信息与未来 2019] 鸡兔同笼

· · 题解

欢迎报名洛谷网校,期待和大家一起进步!

本题考察数学、方程组。

我们可以令鸡的数量为 a、三脚猫的数量为 b、兔子的数量为 c。题目给出两个方程:

a+b+c=x\\ 2a+3b+4c=y \end{cases}

我们可以消去 a。令 a=x-b-c,代入第二个方程得到

2(x-b-c)+3b+4c=y

化简后,

2x-2b-2c+3b+4c=y \quad\Longrightarrow\quad 2x+b+2c=y

b=y-2x-2c

同时,由于 a= x-b-c = x-(y-2x-2c)-c = 3x-y+c,为了保证 a\ge0b\ge0(动物数量不能为负),我们必须有:

另外,c 本身也必须非负,所以综合起来:

c\ge \max(0,\, y-3x) \quad \text{且} \quad c\le \frac{y-2x}{2}

因此,所有满足条件的兔子数量的取值范围为:

\text{下界} = \max(0,\, y-3x) \qquad \text{上界} = \left\lfloor \frac{y-2x}{2} \right\rfloor

参考代码:

// 下界:保证 a >= 0
long long low = max(0LL, y - 3 * x);
// 上界:保证 b >= 0
long long high = (y - 2 * x) / 2;
cout << low << " " << high << "\n";