day 9, pure compute, good candidate for compier:
* python: 2.525 s ± 0.169 s * pypy: 175.0 ms ± 8.9 ms 14x * codon: 29.3 ms ± 7.9 ms 87x
This commit is contained in:
parent
3fe4944d79
commit
72e85ca4f7
|
@ -0,0 +1,36 @@
|
|||
import sys, os
|
||||
|
||||
I = list(map(int, sys.stdin.read().strip()))
|
||||
|
||||
def sum_n(a, b):
|
||||
return (b-a+1)*(a+b)//2
|
||||
|
||||
I = I
|
||||
j = 0
|
||||
b = 0
|
||||
res = 0
|
||||
id = len(I)//2 # last ID
|
||||
x = I[len(I)-1]
|
||||
for i in range(len(I)//2):
|
||||
if len(I)-2*j-1 - 2*i == 0:
|
||||
res += sum_n(b, b+x-1)*i
|
||||
break
|
||||
nb = b + I[2*i]
|
||||
res += sum_n(b, nb-1)*i
|
||||
b = nb
|
||||
space = I[2*i+1]
|
||||
while space > 0:
|
||||
if x > space:
|
||||
nb = b + space
|
||||
res += sum_n(b, nb-1)*id
|
||||
x -= space
|
||||
space = 0
|
||||
else:
|
||||
nb = b + x
|
||||
res += sum_n(b, nb-1)*id
|
||||
id -= 1
|
||||
space -= x
|
||||
j += 1
|
||||
x = I[len(I)-2*j-1]
|
||||
b = nb
|
||||
print(res)
|
|
@ -0,0 +1,30 @@
|
|||
import sys, os
|
||||
|
||||
I = list(map(int, sys.stdin.read().strip()))
|
||||
|
||||
def sum_n(a, b):
|
||||
return (b-a+1)*(a+b)//2
|
||||
|
||||
idxs = []
|
||||
b = 0
|
||||
for i in I:
|
||||
idxs.append(b)
|
||||
b += i
|
||||
|
||||
res = 0
|
||||
id = len(I)//2 # last id
|
||||
for j in range(len(I)-1,-1,-2): # backward
|
||||
fsize = I[j]
|
||||
for i in range(1, j, 2): # find free space forward
|
||||
if I[i] >= fsize: # enough free space
|
||||
b = idxs[i]
|
||||
res += sum_n(b, b+fsize-1)*id
|
||||
idxs[i] += fsize
|
||||
I[i] -= fsize
|
||||
break
|
||||
else: # block too big stays where it is
|
||||
b = idxs[j]
|
||||
res += sum_n(b, b+fsize-1)*id
|
||||
id -= 1
|
||||
|
||||
print(res)
|
Loading…
Reference in New Issue