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
#include<bits/stdc++.h>

using namespace std;

void convert(string &a, vector<int> &A){
    for(auto c:a) A.push_back(c-'0');
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    vector<int> A, B, C;
    string a, b, c;
    cin >> a >> b >> c;
    convert(a, A);
    convert(b, B);
    convert(c, C);

    vector<int> P(A.size()+1);
    P[0] = 0;
    for(int i=1; i<P.size(); i++){
        if(A[i-1] + B[i-1] > 10) P[i] = P[i-1] + 1;
        else P[i] = P[i-1];
    }

    int p = A.size()-1, q = A.size()-1;
    long long res = 0;
    int r = 0;
    while(p >= 0){
        while(p >= 0 && (A[p] + B[p])%10 != C[p]) p--;
        if(p < 0) break;
        q = min(p - 1, q);
        r = (A[p] + B[p])/10;
        while(q >= 0 && (A[q]+B[q]+r)%10 == C[q]){
            r = (A[q]+B[q]+r)/10;
            q--;
        }
        //cerr << p << " " << q << "\n"; 
        res += p-q - P[p+1] + P[q+1];
        //cerr << res << "\n";
        p--;
    }
    cout << res << "\n";
}