09.1, 09.2 python

This commit is contained in:
Fedor Lyanguzov
2024-12-09 17:54:26 +03:00
parent cbea2d783c
commit 571ab1e7fe
+18 -12
View File
@@ -42,26 +42,32 @@ def fat(data):
n = 0 n = 0
for i in range(len(data)): for i in range(len(data)):
if i%2==0: if i%2==0:
files.append((n, l, l+data[i])) files.append([n, l, l+data[i]])
n += 1 n += 1
else: else:
emptys.append((l, l+data[i])) emptys.append([l, l+data[i]])
l += data[i] l += data[i]
return files, emptys return files, emptys
def t(files):
return sum(n*(s+e-1)*(e-s)//2 for n, s, e in files)
def f2(files, emptys): def f2(files, emptys):
for i in reversed(range(len(files))): M = len(emptys)
n, s, e = files[i] i = len(files)-1
j = 0 for _, s, e in reversed(files):
l, r = emptys[0] for j, (l, r) in enumerate(emptys):
while not (j==len(emptys) or e-s<=r-l or s<l): if e-s<=r-l or s<l:
j += 1 break
l, r = emptys[j]
if e-s<=r-l: if e-s<=r-l:
files[i] = (n, l, l+e-s) files[i][1] = l
emptys[j] = (l+e-s, r) files[i][2] = l+e-s
return sum(n*(sum(range(s, e))) for n, s, e in files) emptys[j][0] = l+e-s
i -= 1
return t(files)
assert f2(*fat("2333133121414131402"))==2858 assert f2(*fat("2333133121414131402"))==2858
import cProfile
cProfile.run('f2(*fat(data))')
print(f2(*fat(data))) print(f2(*fat(data)))