day 20, double linked list, pypy to make it fast
This commit is contained in:
parent
ec41730982
commit
0a4b8a70a9
|
@ -0,0 +1,49 @@
|
||||||
|
from __future__ import annotations
|
||||||
|
import sys
|
||||||
|
from dataclasses import dataclass
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class E:
|
||||||
|
v: int
|
||||||
|
p: E
|
||||||
|
n: E
|
||||||
|
|
||||||
|
V0 = None
|
||||||
|
p = None
|
||||||
|
L = []
|
||||||
|
for l in sys.stdin.read().splitlines():
|
||||||
|
e = E(int(l),p,None)
|
||||||
|
L.append(e)
|
||||||
|
if l == "0":
|
||||||
|
V0 = e
|
||||||
|
if p is not None:
|
||||||
|
p.n = e
|
||||||
|
p = e
|
||||||
|
L[-1].n = L[0]
|
||||||
|
L[0].p = L[-1]
|
||||||
|
|
||||||
|
def swap(l,m):
|
||||||
|
k = l.p
|
||||||
|
n = m.n
|
||||||
|
k.n = m
|
||||||
|
n.p = l
|
||||||
|
l.n = n
|
||||||
|
m.p = k
|
||||||
|
l.p = m
|
||||||
|
m.n = l
|
||||||
|
|
||||||
|
for l in L:
|
||||||
|
if l.v > 0:
|
||||||
|
for _ in range(l.v):
|
||||||
|
swap(l,l.n)
|
||||||
|
elif l.v < 0:
|
||||||
|
for _ in range(-l.v):
|
||||||
|
swap(l.p,l)
|
||||||
|
|
||||||
|
S = 0
|
||||||
|
s = V0
|
||||||
|
for i in range(3000+1):
|
||||||
|
if i in [1000,2000,3000]:
|
||||||
|
S += s.v
|
||||||
|
s = s.n
|
||||||
|
print(S)
|
|
@ -0,0 +1,51 @@
|
||||||
|
from __future__ import annotations
|
||||||
|
import sys
|
||||||
|
from dataclasses import dataclass
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class E:
|
||||||
|
v: int
|
||||||
|
p: E
|
||||||
|
n: E
|
||||||
|
|
||||||
|
DEK = 811589153
|
||||||
|
V0 = None
|
||||||
|
p = None
|
||||||
|
L = []
|
||||||
|
for l in sys.stdin.read().splitlines():
|
||||||
|
e = E(int(l)*DEK,p,None)
|
||||||
|
L.append(e)
|
||||||
|
if l == "0":
|
||||||
|
V0 = e
|
||||||
|
if p is not None:
|
||||||
|
p.n = e
|
||||||
|
p = e
|
||||||
|
L[-1].n = L[0]
|
||||||
|
L[0].p = L[-1]
|
||||||
|
|
||||||
|
def swap(l,m):
|
||||||
|
k = l.p
|
||||||
|
n = m.n
|
||||||
|
k.n = m
|
||||||
|
n.p = l
|
||||||
|
l.n = n
|
||||||
|
m.p = k
|
||||||
|
l.p = m
|
||||||
|
m.n = l
|
||||||
|
|
||||||
|
for _ in range(10):
|
||||||
|
for l in L:
|
||||||
|
if l.v > 0:
|
||||||
|
for _ in range(l.v%(len(L)-1)):
|
||||||
|
swap(l,l.n)
|
||||||
|
elif l.v < 0:
|
||||||
|
for _ in range(-l.v%(len(L)-1)):
|
||||||
|
swap(l.p,l)
|
||||||
|
|
||||||
|
S = 0
|
||||||
|
s = V0
|
||||||
|
for i in range(3000+1):
|
||||||
|
if i in [1000,2000,3000]:
|
||||||
|
S += s.v
|
||||||
|
s = s.n
|
||||||
|
print(S)
|
Loading…
Reference in New Issue