# Author: Bartek Knapik
def ans(n):
return n * (n+1) // 2
a = [int(el) for el in input()]
b = [int(el) for el in input()]
c = [int(el) for el in input()]
n = len(a)
apb = []
exact = []
for i in range(n):
apb.append(a[i]+b[i])
if apb[i] == c[i]:
exact.append(True)
else:
exact.append(False)
non_exacts = []
end = n-1
while end > 0:
if exact[end]:
end -= 1
continue
if apb[end] % 10 == c[end]:
begin = end
carry = 0
while True:
res = carry + apb[begin]
if res % 10 != c[begin]:
begin = end
break
if res == int(c[begin]):
break
begin -= 1
carry = 1
if begin < end:
non_exacts.append((begin, end + 1, 1))
end = begin
end -= 1
exacts = []
begin = 0
while begin < n:
if not exact[begin]:
begin += 1
continue
end = begin
while end < n and exact[end]:
end += 1
exacts.append((begin, end, end - begin))
begin = end
ranges = sorted(exacts + non_exacts)
if len(ranges):
ranges_compressed = []
cur_range = ranges[0]
for i in range(1, len(ranges)):
next_range = ranges[i]
if cur_range[1] == next_range[0]:
cur_range = cur_range[0], next_range[1], cur_range[2]+next_range[2]
else:
ranges_compressed.append(cur_range)
cur_range = next_range
ranges_compressed.append(cur_range)
res = 0
for el in ranges_compressed:
res += ans(el[2])
else:
res = 0
print(res)
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 62 63 64 65 66 67 68 69 70 71 72 73 | # Author: Bartek Knapik def ans(n): return n * (n+1) // 2 a = [int(el) for el in input()] b = [int(el) for el in input()] c = [int(el) for el in input()] n = len(a) apb = [] exact = [] for i in range(n): apb.append(a[i]+b[i]) if apb[i] == c[i]: exact.append(True) else: exact.append(False) non_exacts = [] end = n-1 while end > 0: if exact[end]: end -= 1 continue if apb[end] % 10 == c[end]: begin = end carry = 0 while True: res = carry + apb[begin] if res % 10 != c[begin]: begin = end break if res == int(c[begin]): break begin -= 1 carry = 1 if begin < end: non_exacts.append((begin, end + 1, 1)) end = begin end -= 1 exacts = [] begin = 0 while begin < n: if not exact[begin]: begin += 1 continue end = begin while end < n and exact[end]: end += 1 exacts.append((begin, end, end - begin)) begin = end ranges = sorted(exacts + non_exacts) if len(ranges): ranges_compressed = [] cur_range = ranges[0] for i in range(1, len(ranges)): next_range = ranges[i] if cur_range[1] == next_range[0]: cur_range = cur_range[0], next_range[1], cur_range[2]+next_range[2] else: ranges_compressed.append(cur_range) cur_range = next_range ranges_compressed.append(cur_range) res = 0 for el in ranges_compressed: res += ans(el[2]) else: res = 0 print(res) |
English