Как я могу оптимизировать этот код, чтобы не ограничивать время? (Магниты codeforce 344A) - PullRequest
0 голосов
/ 04 августа 2020
number_of_magnets=int(input())
_list=[]
for i in range(0,number_of_magnets):
x=input()
_list.append(x)

number_of_groups=1
for i in range(0,len(_list)):
  if i!=len(_list)-1:
    if _list[i]!=_list[i+1]:
       number_of_groups=number_of_groups+1


print(number_of_groups)

'' '

это проблема codeforce (344A), мой код дает правильный результат, но в случае 7 он дает мне это

"Тест: # 7, время: 1000 мс, память: 28808 КБ, код выхода: 0, код выхода проверки: 0, вердикт: TIME_LIMIT_EXCEEDED "

Я не знаю, какая часть моего кода вызывает это

Ответы [ 2 ]

0 голосов
/ 04 августа 2020

Я измерил ваше решение (только после раздела input) и получил следующий результат (в se c):

>>> python3 test.py 
4
01
01
10
10
2
0.00010013580322265625

Я сделал более компактное и быстрое решение:

_list = [input() for _ in range(int(input()))]
print(len([i for i in range(len(_list) - 1) if _list[i] != _list[i + 1]]) + 1)

Мой результат:

>>> python3 test.py 
4
01
01
10
10
2
7.535385131835938e-05

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

0 голосов
/ 04 августа 2020

Ошибка вызвана тем, что ваш код слишком медленный.

Вам действительно не нужно запоминать каждую прочитанную вами плитку. Вам нужно только проверить, отличается ли плитка, которую вы только что прочитали, от последней.

Кроме того, согласно моим тестам, pypy действительно медленнее, чем python в этой проблеме. С той же отправкой я потерпел неудачу в тесте 7 с pypy 3.6 и добился успеха с 434 мс в тесте 7 с python 3.7

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...