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

using namespace std;
const int MX = 1e6+9;
int a[MX], b[MX], c[MX];
vector<int>vect;
signed main(){
    cin.tie(0)->sync_with_stdio(0);
    string A, B, C; cin >> A >> B >> C;
    int n = A.size();
    for(auto i = 1; i <= n; ++i) a[i] = A[i-1]-'0';
    for(auto i = 1; i <= n; ++i) b[i] = B[i-1]-'0';
    for(auto i = 1; i <= n; ++i) c[i] = C[i-1]-'0';
    for(auto i = n; i; ){
        if((a[i]+b[i])%10 != c[i]){
            vect.push_back(0);
            i--;
            continue;
        }
        if(a[i]+b[i] < 10){
            vect.push_back(1);
            i--;
            continue;
        }
        int j = i-1;
        while(j){
            if(a[j]+b[j] <= 8 || (a[j]+b[j]+1)%10 != c[j]) break;
            j--;
        }
        if((a[j]+b[j]+1)%10 != c[j]){
            vect.push_back(0);
            i = j;
        }
        else{
            vect.push_back(1);
            i = j-1;
        }
    }
    reverse(vect.begin(), vect.end());
    int cur = 0, res = 0;
    for(auto i : vect){
        if(i) cur++;
        else res += (cur*(cur+1))/2, cur = 0;
    }
    cout << res+(cur*(cur+1))/2;
}