Как я могу дополнительно оптимизировать этот код Python, чтобы он соответствовал ограниченному времени?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу дополнительно оптимизировать этот код Python, чтобы он соответствовал ограниченному времени?

Сообщение Anonymous »


На последнем конкурсе по программированию возникла следующая проблема: https://codeforces.com/contest/1916/problem/C

Чтобы решить эту проблему, мне нужно было один раз просмотреть заданный массив и распечатать полученный массив. Я решил использовать цикл For, на каждом этапе которого я добавлял элемент в результирующий список, а после него распечатывал список.

Это решение превысило лимит времени, поэтому я решил воздержаться от использования Append и вместо этого заполнил заранее созданный список.

Это решение также превысило лимит времени, поэтому я решил избегать части «Печать», поскольку она также имеет сложность O (n) и печатала результат каждого шага в цикле For. Однако даже этого не хватило, чтобы уложиться в лимит времени.

Итак, мой вопрос: «Это Python слишком медленный (я слышал, что некоторые люди говорили, что Python не является хорошим выбором для конкурентного программирования) или я мог бы оптимизировать что-то еще, чтобы ускорить свой код?»
р>
Вот исходный код, который я использовал, где обновлял список на каждом этапе цикла For и печатал результирующий список после завершения цикла For:

t = int(input()) для _ в диапазоне (t): n = целое число (вход()) v = список(карта(int, input().split())) если n == 1: печать (v[0]) элиф n == 2: print(v[0], int((v[1] + v[0])/2) * 2) еще: w = [0 для l в диапазоне (n)] ш[0] = v[0] w[1] = int((v[1] + v[0])/2) * 2 с = 0 если v[0] % 2: с += 1 если v[1] % 2: с += 1 б = 0 для k в диапазоне (2, n): если v[k] % 2: с += 1 б = int(с // 3) если с % 3 == 1: б += 1 w[k] = (сумма(v[:k + 1]) - б) печать (* ш) А вот код, в котором я печатал результат каждого шага цикла For, следовательно, временная сложность этого кода равна чистому O(n), поскольку я просматриваю данный список только один раз:
р>
t = int(input()) для _ в диапазоне (t): n = целое число (вход()) v = список(карта(int, input().split())) если n == 1: печать (v[0]) элиф n == 2: print(v[0], int((v[1] + v[0])/2) * 2) еще: w = [0 для x в диапазоне (n)] ш[0] = v[0] печать(w[0], конец=" ") w[1] = int((v[1] + v[0])/2) * 2 печать(w[1], конец=" ") с = 0 если v[0] % 2: с += 1 если v[1] % 2: с += 1 б = 0 для k в диапазоне (2, n): если v[k] % 2: с += 1 б = int(с // 3) если с % 3 == 1: б += 1 w[k] = (сумма(v[:k + 1]) - б) если k == n - 1: печать(ш[к]) еще: print(w[k], end=" ") Любые предложения приветствуются. Такое ощущение, что проблема не в самом алгоритме, а в структурах данных, которые я использовал. Однако это всего лишь моя догадка.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»