SP8795 TWENTYQ - Twenty Questions

题目描述

想象一个封闭的世界,其中所有对象都有一组特征,每个特征可以用“是”或“否”回答。利用这些特征,我们可以唯一地识别出任何对象。换句话说,每个对象可以表示为一个固定长度的布尔值序列。并且,任何两个对象至少在一个特征上不同。 现在,你需要从众多对象中识别出一个特定的对象。为此,你可以向知情者提出一系列问题。每个问题都围绕一个特征,知情者会立即用“是”或“否”给予准确的回答。在得到上一个问题的答案后,你可以决定下一个要问的问题。 你对每个问题都需要支付 100 日元的小费。由于经费有限,你必须在最坏情况下尽量减少提问的数量。虽然你不知道正确答案,但你知道世界上所有的对象信息,因此可以预先制定一个最优的提问策略。 你的任务是:给定一组布尔值编码的对象,计算在最坏情况下,识别出每个对象所需的最少问题数量。

输入格式

输入包含多个数据集。每个数据集从一行开始,这一行包含两个整数 $m$ 和 $n$,分别表示特征数和对象数。你可以假设 $0 < m \leq n$。 接下来的 $n$ 行,每行是一个长度为 $m$ 的由 0 和 1 组成的字符串,表示每个对象的特征。 输入以一行包含两个零结束。

输出格式

对于每个数据集,输出在最坏情况下识别出每个对象所需的最少提问次数。 **本翻译由 AI 自动生成**