#g2011. [GESP2级模拟题]猴子分桃

[GESP2级模拟题]猴子分桃

题目描述

海滩上有一堆桃子,nn 只猴子来分。

每次操作:当前猴子将剩下的桃子平分成 55 堆,发现总是多出 11 个,于是先吃掉这 11 个,然后拿走其中的一堆。

经过 nn 只猴子依次操作后,最后还剩 mm 个桃子。

给定 nnmm,请问最初至少有多少个桃子?

输入格式

第一行一个正整数 tt,表示有 tt 组测试数据。

接下来 tt 行,每行两个正整数 nnmm

输出格式

输出 tt 行,每行一个整数,表示对应每组数据的最初桃子数。

样例输入

3
1 5
2 1
3 3

样例输出

7
8
23

样例解释

第 1 组:n=1,m=5n=1, m=5

  • 逆推:最后剩 55 个,操作前为 5÷4×5+1=75 \div 4 \times 5 + 1 = 7?不对。

让我重新想。

正向操作:假设当前有 xx 个,操作后剩下 xx/51=4x/51x - x/5 - 1 = 4x/5 - 1

逆推:操作后剩 yy 个,操作前应为 (y+1)×5/4(y + 1) \times 5 / 4

n=1,m=5n=1, m=5:操作前 = (5+1)×5/4=7.5(5 + 1) \times 5 / 4 = 7.5?不是整数!

这说明 m=5m=5 不是正确的剩余值。题目要求的是最少桃子数,所以我们需要找最后剩余那个数,使得逆推每一步都能整除。

等等,这里有问题。经典问题中,每次剩余 mm 是给定的,然后向前逆推。但如果 mm 不能使逆推整除,那就没有整数解。

让我重新设计问题,让 mm 作为最后剩余,保证可以逆推。

对于 n=1,m=5n=1, m=5: 逆推一步:(5+1)×5/4=30/4=7.5(5 + 1) \times 5 / 4 = 30/4 = 7.5!不是整数!

这说明 mm 必须满足某些条件才能使逆推每一步都得到整数。

对于 n=1n=1,要使 (m+1)×5/4(m+1)\times5/4 是整数,m+1m+1 必须能被 44 整除。 即 m=4k1m = 4k - 1,其中 k1k \ge 1

m=3m=3(3+1)×5/4=5(3+1)\times5/4 = 5,最初 55 个。 验证:55/51=511=35 - 5/5 - 1 = 5 - 1 - 1 = 3

所以当 n=1,m=3n=1, m=3 时,最初是 55

我需要在题目中明确说 mm 是最后剩余,并保证有整数解。

让我换个设定,让问题更简单且适合 GESP 2:

每天吃掉一半多一个,第 nn 天还剩 mm 个。

正向:xxx/21=x/21x \to x - x/2 - 1 = x/2 - 1 逆推:y(y+1)×2y \to (y + 1) \times 2

这个更简单,不需要除以4,直接用乘法。

n=1,m=5n=1, m=5:逆推 = (5+1)×2=12(5+1)\times2 = 12 验证:1212/21=1261=512 - 12/2 - 1 = 12 - 6 - 1 = 5

这样更干净!而且适合 GESP 2。

但"吃掉一半多一个"这个表述有点残忍(猴子贪吃)。让我换个故事:

母鸡下蛋:每天鸡舍里的鸡蛋数目增加一倍,然后主人拿走 1 个。第 nn 天结束时剩 mm 个。

正向:今天结束 = 昨天结束 × 2 - 1 逆推:昨天结束 = (今天结束 + 1) ÷ 2

或叫做:神奇存钱罐 之类的。

算了,让我直接用猴子吃桃的经典题材,但简化逆推公式:

每天吃一半加1个。第n天还剩m个。最初有多少?

逆推公式:prev=(curr+1)×2prev = (curr + 1) \times 2

这就是单循环递推,不需要嵌套。

为了用到嵌套循环,我改成多组数据:

输入t组 (n, m),每组逆推n次,输出初始值。

外层循环 t 组,内层循环 n 步逆推。

好,这样就有嵌套循环 + 简单递推了!<|end▁of▁thinking|>

<||DSML||tool_calls> <||DSML||invoke name="Write"> <||DSML||parameter name="content" string="true"># g2003 猴子分桃

题目描述

猴妈妈摘了一堆桃子,打算分 nn 天吃完。

猴妈妈的计划是:每天吃掉当前桃子数的一半多一个(如果当前有 xx 个,当天就吃掉 x2+1\frac{x}{2}+1 个)。

已知第 nn 天结束后还剩 mm 个桃子,请问最初至少有多少个桃子?

数据保证每一步的桃子数都是偶数,即每次都能恰好分出一半。

输入格式

第一行一个正整数 tt,表示有 tt 组测试数据。

接下来 tt 行,每行两个正整数 nnmm

输出格式

输出 tt 行,每行一个整数,表示对应每组数据的最初桃子数。

样例输入

3
1 5
2 1
3 3

样例输出

12
6
30

样例解释

第 1 组:n=1,m=5n=1, m=5。逆推:(5+1)×2=12(5 + 1) \times 2 = 12。 验证:1212÷21=1261=512 - 12 \div 2 - 1 = 12 - 6 - 1 = 5

第 2 组:n=2,m=1n=2, m=1。逆推两步:(1+1)×2=4(1+1)\times2=4(4+1)×2=10(4+1)\times2=10。 验证:1051=410 - 5 - 1 = 4421=14 - 2 - 1 = 1

数据范围

1t101 \le t \le 101n201 \le n \le 201m10001 \le m \le 1000