Google kickstart 2020: неправильный ответ - PullRequest
1 голос
/ 05 мая 2020

ссылка на задачу: https://codingcompetitions.withgoogle.com/kickstart/round/000000000019ffc7/00000000001d3f56

Проблема В продаже N домов. Купить i-й дом стоит Ai долларов. У вас есть бюджет в B долларов, который вы можете потратить. Какое максимальное количество домов вы можете купить?

Входные данные В первой строке входных данных указано количество тестовых примеров, далее следуют тестовые примеры T. T. Каждый тестовый пример начинается с единственной строки, содержащей два целых числа N и B. Вторая строка содержит N целых чисел. I-е целое число - это Ai, стоимость i-го дома.

Вывод Для каждого тестового примера выведите одну строку, содержащую Case #x: y, где x - тест номер дела (начиная с 1), а y - максимальное количество домов, которое вы можете купить.

**Limits**
Time limit: 15 seconds per test set.
Memory limit: 1GB.
1 ≤ T ≤ 100.
1 ≤ B ≤ 105.
1 ≤ Ai ≤ 1000, for all i.

**Test set 1**
1 ≤ N ≤ 100.

**Test set 2**
1 ≤ N ≤ 105.

**Sample Input** 
3
4 100
20 90 40 90
4 50
30 30 10 10
3 300
999 999 999

**Sample Output**  
Case #1: 2
Case #2: 3
Case #3: 0

В примере дела № 1 ваш бюджет составляет 100 долларов. Купить 1-й и 3-й дома можно за 20 + 40 = 60 долларов. В примере № 2 ваш бюджет составляет 50 долларов. Купить 1-й, 3-й и 4-й дома можно за 30 + 10 + 10 = 50 долларов. В примере № 3 ваш бюджет составляет 300 долларов. Вы не можете покупать дома (поэтому ответ - 0).

Вот мое решение (Python 3):

T = int(input())

res = []
for i in range(T):
    N, B = map(int, input().split(' '))
    ai = list(map(int, input().split(' ')))
    ai.sort()
    for k in range(len(ai)):
        B = B - ai[k]
        if B < 0:
            res.append(k)
            break
        elif k == len(ai)-1:
            res.append(k+1)

for i in range(T):
    print("Case #", i+1, ":", res[i])

Я перепробовал все тестовые примеры, которые только мог придумать и я получаю ожидаемый результат. Но когда я пытаюсь отправить, появляется сообщение «Образец не выполнен: неправильный ответ». Пожалуйста, дайте мне знать, что именно не так с моим решением и как его можно улучшить.

Ответы [ 3 ]

3 голосов
/ 13 мая 2020

Я думаю, проблема в вашем последнем операторе печати, у вас есть:

>>> print("Case #", i+1, ":", res[i])
Case # 0 : 2

Обратите внимание, что есть дополнительный пробел после «#» и перед «:», чем указано в конкурсе. Попробуйте:

>>> print("Case #", i+1, ": ", res[i], sep="")
Case #0: 2
1 голос
/ 13 мая 2020

Я бы посоветовал немного упростить ваш код и обязательно использовать форматирование строк. Если это python 3.6 и выше, вы можете использовать f-строку или использовать string.format

# your second for loop
counter = 0
for k in ai:
    if B - k >= 0:
        B -= k
        counter += 1
    else:
        res.append(counter)
        break

for i in range(len(res)):
    # using f-string
    print(f"Case #{i+1}: {res[i]}")
    # using string format
    print("Case #{}: {}".format(i+1, res[i]))
0 голосов
/ 20 августа 2020

ЭТО РЕШЕНИЕ В PYTHON 3

n = int(input())
h = []
for i in range(n):
    N, B = map(int,input().split())
    B = int(B)
    d = []
    a = 0
    n = sorted(list(map(int,input().split()[:N])))
    for j in n:
        if j <= B:
            B = B-j
            a+=1
    h.append("Case #{}: {}".format(i+1,a))
for i in h:
print(i)
...