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
74
75
76
77
78
79
aa = input()
bb = input()
cc = input()

n = len(aa)


# t = 0
# for i in range(n):
#     for j in range(i + 1, n + 1):
#         a = int(aa[i:j])
#         b = int(bb[i:j])
#         c = int(cc[i:j])
#         if a + b == c:
#             t += 1
# print(t)


t = 0
ncc = 0
i = n - 1
currentCarry = 0
# print()
nextCarry = 0
extraChance = False

while i >= 0:
    # print(f"i: {i}")

    currentCarry = nextCarry
    a = int(aa[i])
    b = int(bb[i])
    c = int(cc[i])

    digitSum = (a + b) % 10
    trueSum = (a + b) + currentCarry

    nextCarry = trueSum // 10
    correct = trueSum % 10 == c

    if nextCarry == 0 and correct:
        # we can glue
        # print(f"glueing, t: {t} -> {t + ncc}")
        t += ncc

    if digitSum == c and (a + b) <= 9 and not extraChance:
        # print(f"digit sum equal, t: {t} -> {t + 1}")
        t += 1

    if currentCarry == 0:
        ncc += 1

    # most important
    extraChance = False
    if correct:
        # print(f"music continues")
        x = 0
    else:
        # print(f"music stops.")
        ncc = 0
        if currentCarry == 1:
            # extra chance
            extraChance = True
            i += 1
        currentCarry = 0
        nextCarry = 0

    # print(f"t: {t}")
    # print(f"currentCarry: {currentCarry}")
    # print(f"nextCarry: {nextCarry}")
    # print(f"ncc: {ncc}")
    # print(f"trueSum: {trueSum}")
    # print(f"digitSum: {digitSum}")
    # print()
    # print()

    i -= 1

print(t)