Pobre alcancía (número de pensamiento / base)

Título
Suponga que hay n cubos y que los cerdos morirán en m minutos después de beber agua ¿Cuántos cerdos (x) necesita para encontrar cubos "venenosos" en p minutos? Solo hay un cubo venenoso en los n cubos.

Idea: cuando p <m, obviamente no hay solución, por lo que no se considera. El problema radica en observar cuántos estados tiene cada lechón en p minutos, y si hay k estados, entonces el número k-aria correspondiente. Luego, el problema se convierte en el problema de cuántos dígitos se necesitan en n k números.

  • Por ejemplo, supongamos norte = 1000 , metro = 2 , pags = 5 5 , n = 1000, m = 2, p = 5, debido a k = pags / m + 1 = 3 k = \ lfloor p / m \ rfloor +1 = 3 , luego cada cerdo tiene tres situaciones al fin: vivo, muere en la primera etapa y muere en la segunda etapa. Necesito en este momento x = l o g k n = 7 x = \ lceil log_k ^ n \ rceil = 7 cerditos.
  • ¿Cómo lograrlo? Para el cerdo [ 0 k 1 ] [0 , k-1] ) y cubos ( [ 1 , n ] [1, n] ) se numeran por separado, porque el número es b si El cubo de , lo dividimos en números k-arios, como b = 2 9 10 = 000010 2 3 b = 29_ {10} = 0000102_ {3} En ese momento, alimentamos al cochinillo No. 0 en la etapa 2 con agua b, el cochinillo No. 2 en la etapa 1 con agua b, y los lechones con otros números no alimentan agua b. Otros cubos numerados se manejan en consecuencia. Luego, al final, podemos juzgar qué cubo numerado es venenoso (porque el cubo venenoso es único) de acuerdo con la supervivencia del lechón y la etapa de la muerte.
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;
    }
};
Publicados 152 artículos originales · ganado elogios 2 · Vistas 6446

Supongo que te gusta

Origin blog.csdn.net/weixin_43918473/article/details/105250632
Recomendado
Clasificación