#include <iostream>
#include <string>
#include <vector>
using namespace std;
unsigned long long get_result(string const & a, string const & b, string const & c) {
unsigned long long result = 0;
vector<int> diff(a.length()+2, 2);
for(int i = 0; i < a.length(); i++) {
diff[i+1] = a[i] + b[i] - '0' - c[i];
}
unsigned long long cur_add = 0;
for(int i = a.length(); i >= 1; i--) {
if(diff[i] == 0) {
cur_add++;
result += cur_add;
} else if(diff[i] == -1 && diff[i+1] == 10) {
cur_add++;
result += cur_add;
diff[i]++;
} else if(diff[i] == 9 && diff[i+1] == 10 && (diff[i-1] == -1 || diff[i-1] == 9)) {
diff[i]++;
} else if(diff[i] == 10 && (diff[i-1] == -1 || diff[i-1] == 9)) {
continue;
} else {
cur_add = 0;
}
}
return result;
}
void solve() {
string a, b, c;
cin >> a >> b >> c;
cout << get_result(a, b, c) << "\n";
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
solve();
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 | #include <iostream> #include <string> #include <vector> using namespace std; unsigned long long get_result(string const & a, string const & b, string const & c) { unsigned long long result = 0; vector<int> diff(a.length()+2, 2); for(int i = 0; i < a.length(); i++) { diff[i+1] = a[i] + b[i] - '0' - c[i]; } unsigned long long cur_add = 0; for(int i = a.length(); i >= 1; i--) { if(diff[i] == 0) { cur_add++; result += cur_add; } else if(diff[i] == -1 && diff[i+1] == 10) { cur_add++; result += cur_add; diff[i]++; } else if(diff[i] == 9 && diff[i+1] == 10 && (diff[i-1] == -1 || diff[i-1] == 9)) { diff[i]++; } else if(diff[i] == 10 && (diff[i-1] == -1 || diff[i-1] == 9)) { continue; } else { cur_add = 0; } } return result; } void solve() { string a, b, c; cin >> a >> b >> c; cout << get_result(a, b, c) << "\n"; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); solve(); return 0; } |
English