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
// Author : Jakub Rozek
// Task   : DOD - Dodawanie [C]
// Memory : n
// Time   : n

#include <bits/stdc++.h>
using namespace std;

using ll = long long;

struct Column {
    int need = 0;
    int give = 0;
    bool valid = false;

    Column(char a_char, char b_char, char c_char) {
        int sum = a_char - '0' + b_char - '0';
        int c = c_char - '0';

        if (c == sum % 10) {
            need = 0;
            give = sum >= 10;
            valid = true;
            return;
        }
        if (c == (sum + 1) % 10) {
            need = 1;
            give = sum >= 9;
            valid = true;
            return;
        }
    }
};


int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    string a, b, c;
    cin >> a >> b >> c;

    int n = (int)a.size();
    ll answer = 0;
    ll starts = 0;
    bool prev_valid = false;
    int prev_need = 0;

    for (int i=0; i<n; ++i) {
        Column col(a[i], b[i], c[i]);
        
        if (!col.valid) {
            prev_valid = false;
            starts = 0;
            continue;
        }
        
        if (!prev_valid || col.give != prev_need) {
            starts = 0;
        }

        if (col.give == 0) {
            ++starts;
        }
        
        if (col.need == 0) {
            answer += starts;
        }

        prev_valid = true;
        prev_need = col.need;
    }

    cout << answer << '\n';
}