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<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
typedef double db;
typedef vector<int> vi;
typedef pair<int, int> pii;
#define all(x) (x).begin(), (x).end()

char a[1000007];
char b[1000007];
char c[1000007];
int group[1000007];
vector<int> grups;
void solve() {
    cin >> a >> b >> c;
    int n=strlen(a);
    int ans=0;
    int conc=0;
    bool inprog=false;
    a[n]=0;
    b[n]=0;
    c[n]=0;
    for(int i=0; i<n; i++){
        a[i]-='0';
        b[i]-='0';
        c[i]-='0';
        if((a[i]+b[i])%10 == c[i] && a[i]+b[i]>=10){
            //tail
            // cout << ">";
            group[i]=0;
            if(i>0 && inprog && group[i-1] >= 2){
                inprog=false;
                ans+=conc;
            }
            else{
                group[i]=-1;
                inprog=false;
                conc=0;
            }
        }
        else if((a[i]+b[i])%10 == c[i] && a[i]+b[i]<10){
            //standalone
            // cout << "*";
            group[i]=1;
            if(i>0 && (group[i-1] == 0 || group[i-1] == 1)){
                conc++;
            }
            else{
                conc=1;
            }
            ans+=conc;
            inprog=false;
        }
        else if((a[i]+b[i]+1)%10 == c[i] && a[i]+b[i]+1>=10){
            //body
            // cout << "-";
            group[i]=2;
        }
        else if((a[i]+b[i]+1)%10 == c[i] && a[i]+b[i]+1<10){
            //head
            // cout << "<";
            group[i]=3;
            inprog=true;
            if(i>0 && (group[i-1] == 0 || group[i-1] == 1)){
                conc++;
            }
            else{
                conc=1;
            }
        }
        else{
            //defect
            // cout << "#";
            group[i]=-1;
            conc=0;
            inprog=false;
        }
    }
    cout << ans <<'\n';
}

signed main () {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int t = 1;
    // cin >> t;
    while(t-- ) solve();
}