#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
string a, b, c;
cin >> a >> b >> c;
int n = a.size();
vector<int> va, vb, vc;
for (int i=0; i < n; i++) {
va.push_back(a[i]-'0');
vb.push_back(b[i]-'0');
vc.push_back(c[i]-'0');
}
long long int res = 0;
for (int i=n-1; i >= 0; i--) {
// skip non interesting part
while (i >= 0 && (va[i] + vb[i]) % 10 != vc[i])
i--;
if (i < 0)
break;
// interesting part begins
long long int elems = 0;
while ( i >= 0 && (va[i] + vb[i]) % 10 == vc[i]) {
//cout << "INT PART: " << i << ' ' << va[i] << ' ' << vb[i] << '\n';
if (va[i] + vb[i] < 10) {
elems++;
i--;
}
else {
int carry = 0;
while (i >= 0) {
int val = va[i] + vb[i] + carry;
//cout << i << ' ' << val << ' ' << vc[i] << '\n';
if (val % 10 != vc[i]) {
res += elems * (elems + 1) / 2;
elems = 0;
break;
}
else if (val < 10) {
elems++;
i--;
break;
}
else {
carry=1;
i--;
}
}
}
}
//if (elems > 0)
// cout << i << ' ' << elems << '\n';
res += elems * (elems + 1) / 2;
}
cout << res << '\n';
return 0;
}
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 | #include <iostream> #include <string> #include <vector> using namespace std; int main() { string a, b, c; cin >> a >> b >> c; int n = a.size(); vector<int> va, vb, vc; for (int i=0; i < n; i++) { va.push_back(a[i]-'0'); vb.push_back(b[i]-'0'); vc.push_back(c[i]-'0'); } long long int res = 0; for (int i=n-1; i >= 0; i--) { // skip non interesting part while (i >= 0 && (va[i] + vb[i]) % 10 != vc[i]) i--; if (i < 0) break; // interesting part begins long long int elems = 0; while ( i >= 0 && (va[i] + vb[i]) % 10 == vc[i]) { //cout << "INT PART: " << i << ' ' << va[i] << ' ' << vb[i] << '\n'; if (va[i] + vb[i] < 10) { elems++; i--; } else { int carry = 0; while (i >= 0) { int val = va[i] + vb[i] + carry; //cout << i << ' ' << val << ' ' << vc[i] << '\n'; if (val % 10 != vc[i]) { res += elems * (elems + 1) / 2; elems = 0; break; } else if (val < 10) { elems++; i--; break; } else { carry=1; i--; } } } } //if (elems > 0) // cout << i << ' ' << elems << '\n'; res += elems * (elems + 1) / 2; } cout << res << '\n'; return 0; } |
English