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

using namespace std;

int main()
{
    long long wynik = 0;

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

    int len = a.size();

    int i = len - 1;
    long long zero = 0;
    while (i >= 0) {
        int an = a[i] - '0';
        int bn = b[i] - '0';
        int cn = c[i] - '0';
		int x = cn - an - bn;

        switch (x) {
            case 0:
                zero += 1;
                i--;
                while (i >= 0 && x == 0) {
                    an = a[i] - '0';
                    bn = b[i] - '0';
                    cn = c[i] - '0';
                    x = cn - an - bn;
                    if (x == 0) {
                        zero++;
                        i--;
                    }
                }
                break;
            case -10:
                i--;
                if (i >= 0) {
                    an = a[i] - '0';
                    bn = b[i] - '0';
                    cn = c[i] - '0';
                    x = cn - an - bn;
                    while (i > 0 && x == -9) {
                        i--;
                        an = a[i] - '0';
                        bn = b[i] - '0';
                        cn = c[i] - '0';
                        x = cn - an - bn;
                    }
                    if (x == 1) {
                        i--;
                        zero++;
                    }
                    else {
                        wynik += (zero * (zero + 1) / 2);
						zero = 0;
                    }
                }
                break;
            default:
                wynik += (zero * (zero + 1) / 2);
                zero = 0;
                i--;
                break;
		}
    }
    wynik += (zero * (zero + 1) / 2);

    cout << wynik << endl;
}