leetcode之Poor Pigs(458)






假设有 n 只水桶,猪饮水中毒后会在 m 分钟内死亡,你需要多少猪(x)就能在 p 分钟内找出“有毒”水桶?n只水桶里有且仅有一只有毒的桶。


class Solution(object):
    def poorPigs(self, buckets, minutesToDie, minutesToTest):

        pigs = 0
        while (minutesToTest / minutesToDie + 1) ** pigs < buckets:
            pigs += 1
        return pigs





DescriptionnnMirko works on a pig farm that consists of M locked pig-houses and Mirko can't unlock any pighouse because he doesn't have the keys. Customers come to the farm one after another. Each of them has keys to some pig-houses and wants to buy a certain number of pigs. nAll data concerning customers planning to visit the farm on that particular day are available to Mirko early in the morning so that he can make a sales-plan in order to maximize the number of pigs sold. nMore precisely, the procedure is as following: the customer arrives, opens all pig-houses to which he has the key, Mirko sells a certain number of pigs from all the unlocked pig-houses to him, and, if Mirko wants, he can redistribute the remaining pigs across the unlocked pig-houses. nAn unlimited number of pigs can be placed in every pig-house. nWrite a program that will find the maximum number of pigs that he can sell on that day.nInputnnThe first line of input contains two integers M and N, 1 <= M <= 1000, 1 <= N <= 100, number of pighouses and number of customers. Pig houses are numbered from 1 to M and customers are numbered from 1 to N. nThe next line contains M integeres, for each pig-house initial number of pigs. The number of pigs in each pig-house is greater or equal to 0 and less or equal to 1000. nThe next N lines contains records about the customers in the following form ( record about the i-th customer is written in the (i+2)-th line): nA K1 K2 ... KA B It means that this customer has key to the pig-houses marked with the numbers K1, K2, ..., KA (sorted nondecreasingly ) and that he wants to buy B pigs. Numbers A and B can be equal to 0.nOutputnnThe first and only line of the output should contain the number of sold pigs.nSample Inputnn3 3n3 1 10n2 1 2 2n2 1 3 3n1 2 6nSample Outputnn7

Poor Hanamichi


Problem DescriptionnHanamichi is taking part in a programming contest, and he is assigned to solve a special problem as follow: Given a range [l, r] (including l and r), find out how many numbers in this range have the property: the sum of its odd digits is smaller than the sum of its even digits and the difference is 3.nnA integer X can be represented in decimal as:nX=An×10n+An−1×10n−1+…+A2×102+A1×101+A0nThe odd dights are A1,A3,A5… and A0,A2,A4… are even digits.nnHanamichi comes up with a solution, He notices that:n102k+1 mod 11 = -1 (or 10), 102k mod 11 = 1, nSo X mod 11 n= (An×10n+An−1×10n−1+…+A2×102+A1×101+A0)mod11n= An×(−1)n+An−1×(−1)n−1+…+A2−A1+A0n= sum_of_even_digits – sum_of_odd_digitsnSo he claimed that the answer is the number of numbers X in the range which satisfy the function: X mod 11 = 3. He calculate the answer in this way : nAnswer = (r + 8) / 11 – (l – 1 + 8) / 11.nnRukaw heard of Hanamichi’s solution from you and he proved there is something wrong with Hanamichi’s solution. So he decided to change the test data so that Hanamichi’s solution can not pass any single test. And he asks you to do that for him.n nnInputnYou are given a integer T (1 ≤ T ≤ 100), which tells how many single tests the final test data has. And for the following T lines, each line contains two integers l and r, which are the original test data. (1 ≤ l ≤ r ≤ 1018)n nnOutputnYou are only allowed to change the value of r to a integer R which is not greater than the original r (and R ≥ l should be satisfied) and make Hanamichi’s solution fails this test data. If you can do that, output a single number each line, which is the smallest R you find. If not, just output -1 instead.n nnSample Inputn3n3 4n2 50n7 83n nnSample Outputn-1n-1n80