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
#include <iostream>
using namespace std;

const int MAX_N = 1e6;

string a, b, c;
int n, r[MAX_N + 1];
long long res;
bool one_exists = false;

int char_to_int(char c){
    return c - '0';
}

long long calculate_sum(long long cnt){
    return cnt * (cnt + 1) / 2;
}

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


    cin>>a>>b>>c;
    n = a.size();
    for(int i = 1; i <= n; i++){
        r[i] = char_to_int(c[i-1]) - char_to_int(a[i-1]) - char_to_int(b[i-1]);
    }

    int current_cnt = 0;
    for(int i = 1; i <= n; i++){
        if (r[i] == 0) current_cnt++;
        else {
            if (i == n){
                res += calculate_sum(current_cnt);
                current_cnt = 0;
            }
            else {
                if (r[i] == 1 && r[i+1] == -10){
                    current_cnt++;
                    one_exists = false;
                    i++;
                }
                else if (r[i] == -9 && r[i+1] == -10 && one_exists){
                    current_cnt++;
                    one_exists = false;
                    i++;
                }
                else if (r[i] == 1 && r[i+1] == -9){
                    one_exists = true;
                    continue;
                }
                else if (r[i] == -9 && r[i+1] == -9 && one_exists) continue;
                else {
                    res += calculate_sum(current_cnt);
                    current_cnt = 0;
                    one_exists = false;
                }
            }
        }
    }
    res += calculate_sum(current_cnt);
    cout<<res<<endl;
}