@hades432

Как ускорить код на Python?

Решаю задачу по программированию, лимит времени 2с
Самые долгие тесты-2.077с
код:
n, m = map(int, input('').split())
grades = list(map(int, input().split()))

def calculate(m, grades):
    result = 0
    
    for i in range(m):
        if grades[i] != 0:
            result += grades[i]**2
            counter = 0
            for j in range(i + 1, m):
                if counter == grades[i]:
                    break
                if grades[j] != 0:
                    result += grades[j]
                    counter += 1
    return result

print(calculate(m, grades))

Условие:
Аркадий — главный редактор журнала по арт-критике. По долгу службы Аркадий постоянно сталкивается с фундаментальными вопросами "Что есть красота?”, “Как понять что красиво, а что нет?”.
Главред понимает, что искусство можно оценивать по-разному и к разным арт-объектам можно применять разные метрики. За годы работы в арт-индустрии Аркадий выработал собственный принцип оценки красоты любого произведения искусства. Он может сказать, красив арт-объект или нет, вне зависимости от количества критериев оценки "красивости".
Принцип Аркадия состоит в следующем:
Для произвольного объекта искусства определяется некоторое количество критериев в определенном порядке для оценки “красивости”. По каждому критерию можно набрать максимум n первичных баллов. Вторичные баллы за условный критерий i определяются следующим образом:
Если при оценке критерия набирается
ai первичных баллов, то Аркадий начисляет критерию a^2i
вторичных баллов
Кроме того, Аркадий прибавляет бонусные баллы за ai следующих ненулевых оценок по другим критериям (прибавляются первичные баллы)
Для последнего критерия дополнительные баллы не начисляются
Например, если
n=10, Аркадий оценивал картину по пяти критериям, и арт-объект набрал
[10,0,1,0,3] первичных баллов соответственно, то его итоговый результат будет равен 117 вторичных баллов, так как за первый критерий он получил
10^2+1+3 балла, за второе и четвертое — по 0, за третье — 1^2+3, за пятое — 3^2.Аркадий дал последовательность результатов m оценок критериев произведения искусства. Определите общую сумму вторичных баллов.
  • Вопрос задан
  • 317 просмотров
Пригласить эксперта
Ответы на вопрос 2
@va_k
Как я вижу в сумму войдут все первичные оценки с квадратом и сумма первичных оценок как ряда т.е одна оценка войдёт n раз одна n-1 и т д. сумму эту можно посчитать как sum(accumulate(add, grades)) сумму квадратов можно так sum(lambda x: x**2, grades)
Ответ написан
@ganstar565
Можно воспользоваться другим интерпретатором, например pypy.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы