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
80
81
82
83
84
85
86
87
88
89
#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main() {
    string a, b, c;
    cin >> a >> b >> c;

    long long result = 0;
    int n = a.length();
    int r = n - 1;
    int l = n;
    int rem = 0;
    int lWithoutCarry = 0;
    while (r >= 0) {
        bool incorrect = false;
        bool first = true;
        while (l > 0) {
            // printf("\n Without carry:%d\n", lWithoutCarry);
            // printf("Czy nmożemy L: %d R: %d\n", l - 1, r);
            int sum = a[l - 1] - '0' + b[l - 1] - '0' + rem;  
            if (sum % 10 != c[l - 1] - '0') { 
                incorrect = true;
                // if (first) {
                //     if (r > l) result += lWithoutCarry;
                //     printf(" + %d\n", r - l);
                // }
                // printf("źle\n");
                break;
            }

            // printf("ok\n");

            --l;
            if (sum < 10) {
                // printf("nie bylo przeniesienia - dodaj wynik ");

                ++lWithoutCarry;
                if (first) {
                    // printf(" + %d\n", lWithoutCarry);

                    result += lWithoutCarry;
                    first = false;
                } else {
                    // printf(" + 1\n");
                    ++result;
                }
            } else {
                if (first) first = false;
            }

            rem = sum / 10;
        }

        if (r == l - 1) {
            --l;
            --r;
        }
        // printf("L: %d R: %d\n", l, r);
        // printf("\n Przesun R -> Without carry:%d\n", lWithoutCarry);
        rem = 0;
        while (r > 0 && r >= l) {
            int sum = a[r] - '0' + b[r] - '0' + rem;
            // printf("Wywalamy sume: %d\n", sum);
            if (sum < 10) {
                --lWithoutCarry;
                // printf("Nowe lwithoutcarry: %d\n", lWithoutCarry);
            }
            rem = sum / 10;

            
            --r;
            sum = a[r] - '0' + b[r] - '0';
            // printf("Suma: %d C: %d\n", sum, c[r] - '0');
            if (sum % 10 == c[r] - '0') {
                // printf("L: %d R: %d -> Dodaj %d\n", l, r, lWithoutCarry);
                result += lWithoutCarry;
            }
        }
        rem = 0;

        // printf("Po  Without carry:%d\n", lWithoutCarry);
        if(!l) break;

    }
    printf("%lld\n", result);
}