Это хакерранкский вопрос: Алиса - воспитательница в детском саду. Она хочет дать несколько конфет детям в своем классе. Все дети сидят в очереди (их позиции фиксированы), и у каждого из них есть рейтинговый балл в соответствии с его или ее успеваемостью в классе. Алиса хочет дать как минимум 1 конфету каждому ребенку. Если двое детей сидят рядом, то ребенок с более высоким рейтингом должен получить больше конфет. Алиса хочет сэкономить, поэтому ей нужно свести к минимуму общее количество конфет, подаренных детям.

n = int(input())
candies = 1
candy = 1
temp = int(input())
for i in range(1,n):
    temp1 = int(input())
    if (temp1>temp):
        candy = candy + 1        
    else:
        candy = 1

    temp = temp1
    candies = candies+candy 
    print candy

print candies 

Тестовая матрица: n = 10, n элементов: [2 4 2 6 1 7 8 9 2 1]. Я получаю 18 в качестве ответа, в то время как 19 является правильным ответом. Я делаю какую-то ошибку, которую не могу уловить.

Это ссылка на полный вопрос [https://www.hackerrank.com/challenges/candies ]

0
talos1904 24 Апр 2017 в 11:47

2 ответа

Лучший ответ

Измените свой код, как это. Вы выполняете итерацию только в левом направлении, но правый сосед также должен быть проверен. Запустите тот же цикл справа и возьмите максимальное из этих двух значений. Это должно быть вашим новым назначением конфет.

        n = int(input())
        candy = 1
        temp = int(input())
        list =[]
        rating =[]
        rating.append(temp)
        list.append(candy)
        for i in range(1,n):
            temp1 = int(input())
            rating.append(temp1)
            if (temp1>temp):
                candy = candy + 1        
            else:
                candy = 1
            list.append(candy)
            temp = temp1

        rating= rating[::-1]
        list = list[::-1]
        temp = rating[0]
        candies =list[0]
        for i in range(1,n):
            temp1 = rating[i]
            if (temp1>temp):
                list[i]= max(list[i-1]+1,list[i])

            candies =candies+list[i]
            temp = temp1

        print candies
2
Rishabh 24 Апр 2017 в 09:50
    n = input()
    a = [input() for _ in xrange(n)]
   //min. candies he has to give  
    candies = [1] * n

        for i in xrange(1, n):
            if a[i] > a[i-1]:
                candies[i] = candies[i-1] + 1

        for i in xrange(n-2, -1, -1):
            if a[i] > a[i+1]:
                candies[i] = max(candies[i], candies[i+1] + 1)

        print sum(candies)

Вот как я это сделал, дав каждому ребенку по одной конфете.

1
Ajay 24 Апр 2017 в 09:06