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
#include <iostream>
using namespace std;

inline int td(char c) {
    return c - '0';
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    string a, b, c;
    cin >> a >> b >> c;

    int d = a.size();
    bool potrzebuje_jedynki[d], daje_dziesiatke[d+1], zly[d];
    daje_dziesiatke[d] = false;
    for(int i = 0; i < d; i++) {
        zly[i] = true;
        potrzebuje_jedynki[i] = false;
        daje_dziesiatke[i] = false;

        int suma = td(a[i]) + td(b[i]);
        if(suma == 9 && td(c[i]) == 0) {
            zly[i] = false;
            potrzebuje_jedynki[i] = true;
            daje_dziesiatke[i] = true;
            continue;
        }
        if(suma >= 10) {
            daje_dziesiatke[i] = true;

            if(suma-10 == td(c[i]) || suma-10 == td(c[i])-1)
                zly[i] = false;

            if(suma-10 == td(c[i])-1)
                potrzebuje_jedynki[i] = true;
        }
        else {
            if(suma == td(c[i]) || suma == td(c[i])-1)
                zly[i] = false;
            if(suma == td(c[i])-1)
                potrzebuje_jedynki[i] = true;
        }

    }

    long long acc = 0;
    int dostepne_konce = 0;
    for(int p = d-1; p >= 0; p--) {
        if(zly[p]) {
            dostepne_konce = 0;
            continue;
        }

        if(potrzebuje_jedynki[p] != daje_dziesiatke[p+1]) {
            dostepne_konce = 0;
        }

        if(potrzebuje_jedynki[p] == false)
            dostepne_konce++;

        if(daje_dziesiatke[p] == false)
            acc += dostepne_konce;

        
    }

    cout << acc << "\n";
    return 0;
}