#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
ll n, w=0, i;
string a, b, c;
cin >> a >> b >> c;
n = a.size();
vector < vector <ll> > dp(n, {0, 0, 0});
for (i=n-1; i>=0; --i){
ll x=ll(a[i]-'0') + ll(b[i]-'0'), y=ll(c[i]-'0');
if (x %10 == y){
if (i<n-1 && dp[i+1][0]>0 && dp[i+1][1]){
if (x /10 == 1)
dp[i] = {dp[i+1][0] +1, 0, 1};
else
dp[i] = {dp[i+1][0] +1, 1, 0};
}
else{
if (x /10 == 1)
dp[i] = {1, 0, 1};
else
dp[i] = {1, 1, 0};
}
}
if ((x +1) %10 == y){
if (i<n-1 && dp[i+1][0]>0 && dp[i+1][2]){
if ((x +1) /10 == 1)
dp[i] = {dp[i+1][0], 0, 1};
else
dp[i] = {dp[i+1][0], 1, 0};
}
}
if (dp[i][2] == 0)
w += dp[i][0];
}
cout << w << '\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 | #include <bits/stdc++.h> using namespace std; using ll = long long; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); ll n, w=0, i; string a, b, c; cin >> a >> b >> c; n = a.size(); vector < vector <ll> > dp(n, {0, 0, 0}); for (i=n-1; i>=0; --i){ ll x=ll(a[i]-'0') + ll(b[i]-'0'), y=ll(c[i]-'0'); if (x %10 == y){ if (i<n-1 && dp[i+1][0]>0 && dp[i+1][1]){ if (x /10 == 1) dp[i] = {dp[i+1][0] +1, 0, 1}; else dp[i] = {dp[i+1][0] +1, 1, 0}; } else{ if (x /10 == 1) dp[i] = {1, 0, 1}; else dp[i] = {1, 1, 0}; } } if ((x +1) %10 == y){ if (i<n-1 && dp[i+1][0]>0 && dp[i+1][2]){ if ((x +1) /10 == 1) dp[i] = {dp[i+1][0], 0, 1}; else dp[i] = {dp[i+1][0], 1, 0}; } } if (dp[i][2] == 0) w += dp[i][0]; } cout << w << '\n'; return 0; } |
English