1172 - 罐子和硬币


这是一道思维题,最终询问的次数,等于 c 加上猜错(猜空)的次数。 
所以我们的目的是让猜空的情况尽量少。因为分配是我们自己决定的,即我们知道几个罐子有几个硬币。
分多种情况讨论。 
当 k/n×n≥c 时,我们将硬币均分到。每个罐子 k/n 个,我们只要每个罐子取 k/n ,就不会猜空一次,答案是 c 。
 k%n=0 时,我们均分所有硬币,这样我们每个罐子取 k/n 个,也不会出现猜空的情况,答案是 c 。 
除了以上两种情况,则一定会出现猜空的情况。 
我们假设所有罐子中,硬币数量最多的罐子里面有 v 个,那么为了拿到最终的硬币数量,我们在猜硬币的时候,对于所有硬币数量小于 v 的罐子,都有可能猜空一次。这种情况下,我们要让硬币为 v 的罐子尽量多( v 是所有罐中硬币数量的最大值)。设硬币数量等于 v 的罐子的数量为 row ,则剩余的罐子数量为 n−row ,在最坏情况下这些罐子都会猜空,因此最坏猜空 n−row 次。 
为了让装有 v 个硬币的罐子数量尽量多,我们让 v 尽量小,根据条件 1,2 的限制,如果每个罐子里装 k/n 个,还有剩余的硬币,因此 v 最小等于 (k/n)+1 ,这样的罐子共有 row=k/v 个。剩下的罐子随便分配剩下的硬币即可(剩下的硬币总数<v 个,罐子数量为 n−row个 ),这 n−row个罐子都有可能猜空。
复杂度 o(1)