Я пытаюсь справиться с задачами Codejam, мой основной язык программирования - Python, и поэтому я также решаю все проблемы, с которыми сталкиваюсь, используя Python. Однако я начал нажимать TLE
с кодом, который кажется нормальным и соответствует решению, описанному в анализе. Поэтому я изучаю возможность использования Cython, чтобы ускорить мой код. Я могу использовать это на своем локальном компьютере, я более или менее понимаю основы того, как это работает. Из того, что я собрал на inte rnet, похоже, что google code jam позволяет использовать Cython, но я не знаю, как его использовать.
В качестве примера я недавно попробовал решение New Elements : Part 1
из Google Code Jam 2019: Раунд 2 (см. ниже). Какие практические шаги я должен предпринять, чтобы сделать это решение более быстрым, используя Cython? Я НЕ прошу каких-либо предложений относительно того, как улучшить этот код, просто как использовать Cython в среде codejam.
T=int(input())
for t in range(1, T+1):
N=int(input())
CJ_list=list()
possible=True
for n in range(N):
C, J = map(int, input().split())
CJ_list.append((C, J))
ls_crossings=list()
for n1, CJ1 in enumerate(CJ_list):
if not possible:
break
for n2, CJ2 in enumerate(CJ_list):
if n1<=n2:
continue
if CJ1==CJ2:
possible=False
break
if CJ1[0] == CJ2[0] or CJ1[1] == CJ2[1]:
continue
teller=(CJ2[1]-CJ1[1])
noemer=(CJ1[0] - CJ2[0])
if (teller * noemer < 0):
continue
is_duplicate=False
for crossing in ls_crossings:
if crossing[0]*noemer==crossing[1]*teller:
is_duplicate=True
break
if not is_duplicate:
ls_crossings.append((teller, noemer))
if possible:
print("Case #{}: {}".format(t, len(ls_crossings)+1))
else:
print("Case #{}: {}".format(t, 0))