#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
ios::sync_with_stdio(0), cin.tie(0);
string a, b, c;
cin >> a >> b >> c;
ll n = a.size();
bool akt = false;
ll wynik = 0, pWych = -1, l0 = 0;
auto dodaj = [&]() {
if (akt)
wynik += l0 * (l0 - 1) / 2;
akt = false;
l0 = 0;
pWych = -1;
};
for (ll i = n - 1; i >= 0; --i) {
ll x = a[i] - '0';
ll y = b[i] - '0';
ll z = c[i] - '0';
ll d = x + y - z;
ll wch, wych;
bool ok = true;
if (d == 0) {
wch = 0;
wych = 0;
} else if (d == 10) {
wch = 0;
wych = 1;
} else if (d == -1) {
wch = 1;
wych = 0;
} else if (d == 9) {
wch = 1;
wych = 1;
} else {
ok = false;
}
if (!ok) {
dodaj();
continue;
}
if (!akt || wch != pWych) {
dodaj();
akt = true;
l0 = (wch == 0 ? 1 : 0);
}
l0 += (wych == 0 ? 1 : 0);
pWych = wych;
}
dodaj();
cout << wynik << '\n';
}
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 | #include <bits/stdc++.h> using namespace std; using ll = long long; int main() { ios::sync_with_stdio(0), cin.tie(0); string a, b, c; cin >> a >> b >> c; ll n = a.size(); bool akt = false; ll wynik = 0, pWych = -1, l0 = 0; auto dodaj = [&]() { if (akt) wynik += l0 * (l0 - 1) / 2; akt = false; l0 = 0; pWych = -1; }; for (ll i = n - 1; i >= 0; --i) { ll x = a[i] - '0'; ll y = b[i] - '0'; ll z = c[i] - '0'; ll d = x + y - z; ll wch, wych; bool ok = true; if (d == 0) { wch = 0; wych = 0; } else if (d == 10) { wch = 0; wych = 1; } else if (d == -1) { wch = 1; wych = 0; } else if (d == 9) { wch = 1; wych = 1; } else { ok = false; } if (!ok) { dodaj(); continue; } if (!akt || wch != pWych) { dodaj(); akt = true; l0 = (wch == 0 ? 1 : 0); } l0 += (wych == 0 ? 1 : 0); pWych = wych; } dodaj(); cout << wynik << '\n'; } |
English