#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;
}
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; } |
English