#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
cin.tie(0)->sync_with_stdio(0);
string s1, s2, s3;
cin>>s1>>s2>>s3;
vector<int> groups;
bool last_ok = false;
bool last_carry = false;
for(int i = s1.size() - 1; i>=0 ;i--){
if(!last_ok) groups.push_back(0);
int tmp = ((last_carry)?1:0);
int d1 = s1[i] - '0';
int d2 = s2[i] - '0';
int d3 = s3[i] - '0';
tmp += d1 + d2;
if(last_carry and tmp % 10 != d3){
last_ok = false;
last_carry = false;
groups.push_back(0);
} else if(last_carry){
last_ok = true;
last_carry = (tmp > 9);
if(!last_carry) groups.back()++;
continue;
}
tmp = d1 + d2;
if(tmp % 10 != d3){
last_ok = false;
last_carry = false;
continue;
}
groups.back()++;
last_ok = true;
last_carry = (tmp > 9);
if(last_carry) groups.back()--;
}
int result = 0;
for(int val : groups){
result += ((val + 1) * val) / 2;
}
cout<<result<<endl;
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 | #include <bits/stdc++.h> using namespace std; #define int long long signed main(){ cin.tie(0)->sync_with_stdio(0); string s1, s2, s3; cin>>s1>>s2>>s3; vector<int> groups; bool last_ok = false; bool last_carry = false; for(int i = s1.size() - 1; i>=0 ;i--){ if(!last_ok) groups.push_back(0); int tmp = ((last_carry)?1:0); int d1 = s1[i] - '0'; int d2 = s2[i] - '0'; int d3 = s3[i] - '0'; tmp += d1 + d2; if(last_carry and tmp % 10 != d3){ last_ok = false; last_carry = false; groups.push_back(0); } else if(last_carry){ last_ok = true; last_carry = (tmp > 9); if(!last_carry) groups.back()++; continue; } tmp = d1 + d2; if(tmp % 10 != d3){ last_ok = false; last_carry = false; continue; } groups.back()++; last_ok = true; last_carry = (tmp > 9); if(last_carry) groups.back()--; } int result = 0; for(int val : groups){ result += ((val + 1) * val) / 2; } cout<<result<<endl; return 0; } |
English