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

using namespace std;

int main() {
    long long n,ans = 0;
    string a,b,c;
    cin>>a>>b>>c;
    n = a.size();
    vector<int> v,w;
    for(int i=0; i<n; ++i) {
        v.push_back(0);
        w.push_back(0);
    }
    if(int(a[n-1]-'0') + int(b[n-1]-'0') == int(c[n-1]-'0')) v[n-1]++;
    if(int(a[n-1]-'0') + int(b[n-1]-'0') == int(c[n-1]-'0') + 10) w[n-1]++;
    for(int i=n-2; i>=0; --i) {
        if(int(a[i]-'0') + int(b[i]-'0') == int(c[i]-'0')) v[i] = v[i+1] + 1;
        if(int(a[i]-'0') + int(b[i]-'0') == int(c[i]-'0') - 1) v[i] = w[i+1];
        if(int(a[i]-'0') + int(b[i]-'0') == int(c[i]-'0') + 10) w[i] = v[i+1] + 1;
        if(int(a[i]-'0') + int(b[i]-'0') == int(c[i]-'0') + 10 - 1) w[i] = w[i+1];
    }
    for(int i=0; i<n; ++i) ans += v[i];
    
    cout<<ans<<endl;
    
    return 0;
}