{LeetCode} 458. Poor Pigs

There are 1000 buckets, one and only one of them contains poison, the rest are filled with water. They all look the same. If a pig drinks that poison it will die within 15 minutes. What is the minimum amount of pigs you need to figure out which bucket contains the poison within one hour.

Answer this question, and write an algorithm for the follow-up general case.

Follow-up:

If there are n buckets and a pig drinking poison will die within m minutes, how many pigs (x) you need to figure out the "poison" bucket within p minutes? There is exact one bucket with poison.


刚看到题的时候感觉好难啊,想着怎么组织排异组,因为以前看过经典的死囚试毒的问题是2瓶毒酒会有干扰,但是这题里只有一瓶,简单一些。

代码很简单,引用 MyPremiumAccount 的代码:(故标为转载)

class Solution {
public:
    int poorPigs(int buckets, int minutesToDie, int minutesToTest) {
        int t = (minutesToTest-1)/ minutesToDie + 1;
        if (buckets == 1) return 0;
        return log(buckets - 1) / log(t + 1) + 1;
    }
};

举例:1000, 15, 60

首先要知道,一只猪在总时间内最多喝几瓶酒,这里很好得到60/15 = 4

同一只猪就有了4个states, 第一瓶酒死,第二瓶酒死,第三瓶酒死,第四瓶酒死。

再加上到最后都不死,一只猪就可以表示5个状态了。

这就很像是5进制数得一位,而5^5 = 3125 < 1000,因此使用5只猪就可以将毒酒在1000瓶酒中找出来了。

你可能感兴趣的:(C++,C++)