-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patht2.py
61 lines (53 loc) · 1.99 KB
/
t2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import sys
def getNextNzero(arr, curIdx):
N = len(arr)
i = curIdx
while i < N and arr[i] == 0:
i += 1
return i
def calcDist(src, dst):
sumSteps = 0
N = len(src)
# set start position
#print(dst)
#print(src)
dstLeftIdx = getNextNzero(dst, 0)
srcLeftIdx = getNextNzero(src, dstLeftIdx)
#print(dstLeftIdx, srcLeftIdx)
while dstLeftIdx < N and srcLeftIdx < N and dstLeftIdx <= srcLeftIdx:
if dst[dstLeftIdx] > src[srcLeftIdx]:
sumSteps += (srcLeftIdx - dstLeftIdx) * src[srcLeftIdx]
dst[dstLeftIdx] -= src[srcLeftIdx]
src[srcLeftIdx] = 0
# update srcLeftIdx
srcLeftIdx = getNextNzero(src, srcLeftIdx)
elif dst[dstLeftIdx] < src[srcLeftIdx]:
sumSteps += (srcLeftIdx - dstLeftIdx) * src[srcLeftIdx]
src[srcLeftIdx] -= dst[dstLeftIdx]
dst[dstLeftIdx] = 0
dstLeftIdx = getNextNzero(dst, dstLeftIdx)
srcLeftIdx = getNextNzero(src, dstLeftIdx)
else:
sumSteps += (srcLeftIdx - dstLeftIdx) * src[srcLeftIdx]
dst[dstLeftIdx] = 0
src[srcLeftIdx] = 0
dstLeftIdx = getNextNzero(dst, dstLeftIdx)
srcLeftIdx = getNextNzero(src, dstLeftIdx)
if sum(src) == 0:
return sumSteps
leftNum = sum(src)
srcLeftMostIdx = getNextNzero(src, 0)
dstLeftMostIdx = getNextNzero(dst, 0)
middlePartSum = leftNum * (srcLeftMostIdx + dstLeftMostIdx)
leftDelta = sum([(i-srcLeftMostIdx) * src[i] for i in range(srcLeftMostIdx, N)])
rightDelta = sum([(i-dstLeftMostIdx) * dst[i] for i in range(dstLeftMostIdx, N)])
sumSteps += (middlePartSum + leftDelta + rightDelta)
return sumSteps
if __name__ == "__main__":
sys.stdin = open("input.txt", "r")
N = int(sys.stdin.readline().strip())
arr = []
for i in range(2):
line = sys.stdin.readline()
arr.append([int(i) for i in line.strip().split()])
print(calcDist(arr[0], arr[1]))