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;
}