#include <iostream>
#include <vector>
using namespace std;
int main()
{
string s1,s2,s3;
cin>>s1>>s2>>s3;
int n=s1.size();
long long wynik=0;
int ilepodrzad=0;
for(int i=n-1;i>=0;i--){
int l1=s1[i]-'0';
int l2=s2[i]-'0';
int l3=s3[i]-'0';
if(l1+l2==l3){
ilepodrzad++;
}
if(l1+l2>9){
// cout<<i<<" "<<wynik<<" "<<ilepodrzad<<"\n";
if(l1+l2-10==l3){
bool przeniesienie=1;
for(int j=i-1;j>=0;j--){
int ll1=s1[j]-'0';
int ll2=s2[j]-'0';
int ll3=s3[j]-'0';
if(ll1+ll2+przeniesienie==ll3||ll1+ll2+przeniesienie-10==ll3){
if(ll1+ll2==ll3){
// cout<<ll1<<" "<<ll2<<" "<<ll3<<" "<<przeniesienie<<" "<<ilepodrzad<<" "<<i<<"\n";
wynik++;
ilepodrzad++;
}
if(ll1+ll2+1==ll3){
// cout<<"+ "<<ll1<<" "<<ll2<<" "<<ll3<<" "<<i<<"\n";
wynik++;
wynik+=(ilepodrzad*(ilepodrzad+1))/2;
ilepodrzad=0;
}
}else{
ilepodrzad=0;
break;
}
if(ll1+ll2>9){
wynik+=(ilepodrzad*(ilepodrzad+1))/2;
ilepodrzad=0;
przeniesienie=1;
}else{
przeniesienie=0;
}
}
}
}
if(l1+l2!=l3&&l1+l2<10){
wynik+=(ilepodrzad*(ilepodrzad+1))/2;
ilepodrzad=0;
}
}
wynik+=(ilepodrzad*(ilepodrzad+1))/2;
ilepodrzad=0;
cout<<wynik;
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 63 64 65 | #include <iostream> #include <vector> using namespace std; int main() { string s1,s2,s3; cin>>s1>>s2>>s3; int n=s1.size(); long long wynik=0; int ilepodrzad=0; for(int i=n-1;i>=0;i--){ int l1=s1[i]-'0'; int l2=s2[i]-'0'; int l3=s3[i]-'0'; if(l1+l2==l3){ ilepodrzad++; } if(l1+l2>9){ // cout<<i<<" "<<wynik<<" "<<ilepodrzad<<"\n"; if(l1+l2-10==l3){ bool przeniesienie=1; for(int j=i-1;j>=0;j--){ int ll1=s1[j]-'0'; int ll2=s2[j]-'0'; int ll3=s3[j]-'0'; if(ll1+ll2+przeniesienie==ll3||ll1+ll2+przeniesienie-10==ll3){ if(ll1+ll2==ll3){ // cout<<ll1<<" "<<ll2<<" "<<ll3<<" "<<przeniesienie<<" "<<ilepodrzad<<" "<<i<<"\n"; wynik++; ilepodrzad++; } if(ll1+ll2+1==ll3){ // cout<<"+ "<<ll1<<" "<<ll2<<" "<<ll3<<" "<<i<<"\n"; wynik++; wynik+=(ilepodrzad*(ilepodrzad+1))/2; ilepodrzad=0; } }else{ ilepodrzad=0; break; } if(ll1+ll2>9){ wynik+=(ilepodrzad*(ilepodrzad+1))/2; ilepodrzad=0; przeniesienie=1; }else{ przeniesienie=0; } } } } if(l1+l2!=l3&&l1+l2<10){ wynik+=(ilepodrzad*(ilepodrzad+1))/2; ilepodrzad=0; } } wynik+=(ilepodrzad*(ilepodrzad+1))/2; ilepodrzad=0; cout<<wynik; return 0; } |
English