#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
string one, two, three;
cin >> one >> two >> three;
long long n = one.size();
vector<int> a(n), b(n), c(n), cat(n);
for (size_t i = 0; i < n; i++) {
a[i] = one[i] - '0';
b[i] = two[i] - '0';
c[i] = three[i] - '0';
if (a[i] + b[i] == c[i]) {
cat[i] = 1;
} else if (a[i] + b[i] == c[i] + 10) {
cat[i] = 2;
} else if (a[i] + b[i] + 1 == c[i]) {
cat[i] = 3;
} else if (a[i] + b[i] + 1 == c[i] + 10) {
cat[i] = 4;
} else {
cat[i] = 0;
}
}
// cout << "Categories: ";
// for (size_t i = 0; i < n; i++) {
// cout << cat[i] << " ";
// }
// cout << endl;
// cout << " ";
long long result = 0;
long long count = 0;
int last = -1;
bool block = false;
for (size_t i = 0; i < n; i++) {
if (cat[i] == 0) {
result += (count + 1) * count / 2;
count = 0;
block = false;
} else if (cat[i] == 1) {
if (last == 3 || last == 4) {
result += (count + 1) * count / 2;
count = 0;
block = false;
}
count++;
} else if (cat[i] == 2) {
if (last == 1 || last == 2) {
result += (count + 1) * count / 2;
count = 0;
block = false;
}
if (last == 3 || last == 4) {
if (block) {
count++;
block = false;
}
}
} else if (cat[i] == 3) {
if (last == 3 || last == 4) {
result += (count + 1) * count / 2;
count = 0;
}
block = true;
} else if (cat[i] == 4) {
if (last == 1 || last == 2) {
result += (count + 1) * count / 2;
count = 0;
block = false;
}
}
last = cat[i];
// cout << result << " ";
}
result += (count + 1) * count / 2;
cout << result;
}
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 <iostream> #include <vector> #include <set> #include <algorithm> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); string one, two, three; cin >> one >> two >> three; long long n = one.size(); vector<int> a(n), b(n), c(n), cat(n); for (size_t i = 0; i < n; i++) { a[i] = one[i] - '0'; b[i] = two[i] - '0'; c[i] = three[i] - '0'; if (a[i] + b[i] == c[i]) { cat[i] = 1; } else if (a[i] + b[i] == c[i] + 10) { cat[i] = 2; } else if (a[i] + b[i] + 1 == c[i]) { cat[i] = 3; } else if (a[i] + b[i] + 1 == c[i] + 10) { cat[i] = 4; } else { cat[i] = 0; } } // cout << "Categories: "; // for (size_t i = 0; i < n; i++) { // cout << cat[i] << " "; // } // cout << endl; // cout << " "; long long result = 0; long long count = 0; int last = -1; bool block = false; for (size_t i = 0; i < n; i++) { if (cat[i] == 0) { result += (count + 1) * count / 2; count = 0; block = false; } else if (cat[i] == 1) { if (last == 3 || last == 4) { result += (count + 1) * count / 2; count = 0; block = false; } count++; } else if (cat[i] == 2) { if (last == 1 || last == 2) { result += (count + 1) * count / 2; count = 0; block = false; } if (last == 3 || last == 4) { if (block) { count++; block = false; } } } else if (cat[i] == 3) { if (last == 3 || last == 4) { result += (count + 1) * count / 2; count = 0; } block = true; } else if (cat[i] == 4) { if (last == 1 || last == 2) { result += (count + 1) * count / 2; count = 0; block = false; } } last = cat[i]; // cout << result << " "; } result += (count + 1) * count / 2; cout << result; } |
English