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
#include <iostream>
#include<vector>
#include <string>

std::vector<int> my_get_line() {
    std::string s;
    std::cin >> s;
    std::vector<int> result;
    for (const char c : s) {
        result.emplace_back(c - '0');
    }
    return result;
}

int main() {
    const auto a = my_get_line();
    const auto b = my_get_line();
    const auto c = my_get_line();
    
    int64_t starting_pairs = 0;
    int addone = 0;
    int64_t result = 0;

    for (int i = a.size() - 1; i >= 0; i--) {
//        std::cout << i << ' ' << a[i] << ' ' << b[i] << ' ' << c[i] << '\n';
        if (addone == 0) {
            if (a[i] + b[i] == c[i]) {
                result += starting_pairs + 1;
                starting_pairs++;
            } else {
                if (a[i] + b[i] == 10 + c[i]) {
                    addone = 1;
                    starting_pairs++;
                } else {
                    starting_pairs = 0;
                    addone = (a[i] + b[i]) / 10;
                }
            }
        } else { // addone = 1
            if (a[i] + b[i] == c[i]) {
                result++;
                addone = 0;
                starting_pairs = 1;
            } else if (a[i] + b[i] == c[i] + 10) {
                addone = 1;
                starting_pairs = 1;
            } else if (a[i] + b[i] + 1 == c[i]) {
                addone = 0;
                result += starting_pairs;
            } else if (a[i] + b[i] + 1 == c[i] + 10) {
                addone = 1;
            } else {
                starting_pairs = 0;
                addone = (a[i] + b[i]) / 10;
            }
        }
    }
    std::cout << result << '\n';
}