かわいそうな貯金箱(思考/ベース数)

タイトル
n個のバケツがあり、水を飲んでからm分後に豚が死亡するとします。p分で「有毒な」バケツを見つけるには何匹の豚(x)が必要ですか?n個のバケツに有毒バケツが1つだけあります。

アイデア:p <mの場合、明らかに解がないため、考慮されません。問題は、各子豚がp分でいくつの状態を監視するかにあり、k個の状態がある場合、対応するk-ary数を監視します。次に、問題はn個のk番号に必要な桁数の問題に変換されます。

  • たとえば、 = 1000 メートル = 2 p = 5 n = 1000、m = 2、p = 5、 原因 k = p / m + 1 = 3 k = \ lfloor p / m \ rfloor +1 = 3 、それから各ブタはついに3つの状況を持っています、生きている、第一段階で死ぬ、そして第二段階で死ぬ。現時点で必要 x = l o g k n = 7 x = \ lceil log_k ^ n \ rceil = 7 匹の子ぶた。
  • それを達成する方法は?豚のために( [ 0 k 1 ] [0、k-1] )およびバケット( [ 1 , n ] [1、n] )は個別に番号が付けられています。 b b のバケット。次のように、k進数に分割します。 b = 2 9 10 = 000010 2 3 b = 29_ {10} = 0000102_ {3} その際、ステージ2の子豚No.0に水bを給餌し、ステージ1の子豚No.2に水bを給餌し、それ以外の数の子豚には水bを給餌しません。他の番号付きバケットはそれに応じて処理されます。最後に、子ブタの生存と死の段階に応じて、有毒なバケツ(有毒なバケツは一意であるため)を判断できます。
class Solution {
public:
    int poorPigs(int buckets, int minutesToDie, int minutesToTest) {
        int k = minutesToTest/minutesToDie+1;
        int ans = ceil(log(buckets)/log(k));
        return ans;
    }
};
公開された152元の記事 ウォンの賞賛2 ビュー6446

おすすめ

転載: blog.csdn.net/weixin_43918473/article/details/105250632