前言
2025年的ACM区域赛北京站上,前辈率先独自AC了一道签到题。比赛后我问前辈是什么题目,前辈说是天平称次品的问题。哦那没事了,确实是道水题。但是我看了一眼题目发现,题目说到,并不清楚次品和正品的轻重关系,这咋做啊?再看了一眼前辈的代码,核心的公式是 x = ⌈ log 3 ( 2 n ) ⌉ x=\lceil \log_3(2n) \rceil x=⌈log3(2n)⌉ 。WTF?我回去认真思考了一下,发现前辈的答案确实是对的。
天平称次品问题其实有两类:
A:n个物品里有1个次品,并且次品比正品重,问至多需要称多少次?
B:n个物品里有1个次品,但不知道次品和正品谁更重,问至多需要称多少次?
对于A类问题十分简单,假如是9个物品,那么就拿出6个放在天平的左右侧(记作 3 v 3 ∼ 3 3v3\sim3 3v3∼3,最后的3表示剩下3个没有称)。如果天平倒向左边,那么次品就在左边3个里;倒向右边,就在右边3个里;水平的话,次品则是在剩下的3个里。无论哪种情况都是变成了3个物品里有1个次品,然后依样画葫芦进行 1 v 1 ∼ 1 1v1\sim1 1v1∼1即可。
所以3个物品只需1次,9个物品只需2次,27个物品只需3次…… 3 n 3^n 3n个物品就只需n次。至于不是3的幂,则需要往上进一,用公式写就是: x = ⌈ log 3 n ⌉ x=\lceil \log_3n \rceil x=⌈log3n⌉。
对于B类问题,则要复杂很多。
从13出发
对于B类问题,我们举一个实际的例子,13个物品里有1个次品,答案是3次。我给出了具体的决策树:
具体地,首先我们拿出8个,天平左右各4个,剩下5个(记作 4 v 4 ∼ 5 4v4\sim5 4v4∼5)。如果天平是水平的,说明次品在剩下的5个里,不平则在这8个里,但由于不清楚次品和正品的轻重关系,因此无法确定在左边4个还是右边4个。
- 如果次品在剩下的5个里,我们拿出3个,和已确定是正品的8个里中的3个,放在天枰的左右侧(记作 3 v 3 ‾ ∼ 2 3v\overline{3}\sim2 3v3∼2, 3 ‾ \overline{3} 3表示3个正品)。如果天平是水平的,说明次品在剩下的2个里,不平则是在那3个里。
- 剩下的2个有次品的话,只要拿1个和1个正品称( 1 v 1 ‾ ∼ 1 1v\overline{1}\sim1 1v1∼1),水平就是剩下的是次品,不平就是这个是次品
- 这3个有次品的话,我们发现我们其实已经知道了次品和正品的轻重关系,因为 3 v 3 3v3 3v3时。如果天平往左倒,说明次品更重;如果往右倒,说明次品更轻。知道轻重关系的话,这个问题就退化成A类问题了,3个物品就是 1 v 1 ∼ 1 1v1\sim1 1v1∼1。
- 如果次品在那8个里,第一次的天平有可能是往左倒,也有可能是往右倒,但是这两种情况其实是一样的,是对称的,那么不失一般性,我们只考虑往左倒的情况。我们拿出左边4个中的3个,和右边4个中的2个,放在天平左边,然后拿出5个正品(第一次称剩下的5个刚好)放在天平右边,进行称量(记作 ( 3 + 2 ) v 5 ‾ ∼ ( 2 + 1 ) (3+2)v\overline{5}\sim(2+1) (3+2)v5∼(2+1)),注意到这次称量只要不平,就可以得到轻重关系。如果水平,说明次品在剩下的2+1个;如果不平,说明次品在那3+2个中
- 剩下的2+1个有次品的话,我们取出左边1个和右边1个放在天平左边,再拿2个正品放在天平右侧,进行称量(记作 ( 1 + 1 ) v 2 ‾ ∼ ( 1 + 0