#include <bits/stdc++.h>
typedef unsigned long long ll;
using namespace std;
ll get(char s) {
return (ll)(s - '0');
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
string a, b, c;
cin >> a >> b >> c;
std::vector<std::vector<ll>> dp(a.size() + 1, std::vector<ll>(10));
ll sum = 0, rest, newRest;
for (int i = a.size() - 1; i >= 0; --i) {
sum = get(a[i]) + get(b[i]);
rest = sum / 10;
sum %= 10;
newRest = (10 + get(c[i]) - sum) % 10;
if (sum == get(c[i])) dp[i][rest] = 1 + dp[i+1][0];
else dp[i][rest + (sum + newRest) / 10] = dp[i+1][newRest];
}
ll result = 0;
for (int i = 0; i < a.size(); ++i) {
result += dp[i][0];
}
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 | #include <bits/stdc++.h> typedef unsigned long long ll; using namespace std; ll get(char s) { return (ll)(s - '0'); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); string a, b, c; cin >> a >> b >> c; std::vector<std::vector<ll>> dp(a.size() + 1, std::vector<ll>(10)); ll sum = 0, rest, newRest; for (int i = a.size() - 1; i >= 0; --i) { sum = get(a[i]) + get(b[i]); rest = sum / 10; sum %= 10; newRest = (10 + get(c[i]) - sum) % 10; if (sum == get(c[i])) dp[i][rest] = 1 + dp[i+1][0]; else dp[i][rest + (sum + newRest) / 10] = dp[i+1][newRest]; } ll result = 0; for (int i = 0; i < a.size(); ++i) { result += dp[i][0]; } cout << result; } |
English