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
#include <bits/stdc++.h>
using namespace std;
int main(){
string a,b,c;
cin>>a>>b>>c;
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
reverse(c.begin(),c.end());
int n=a.size();
vector<vector<long long>>dp(n,vector<long long>(2,0));
if(a[0]-'0'+b[0]-'0'==c[0]-'0')
dp[0][0]=1;
else if(a[0]-'0'+b[0]-'0'-10==c[0]-'0')
dp[0][1]=1;
for(int i=1;i<n;i++){
if(a[i]-'0'+b[i]-'0'==c[i]-'0')
dp[i][0]+=dp[i-1][0]+1;
else if(a[i]-'0'+b[i]-'0'+1==c[i]-'0')
dp[i][0]+=dp[i-1][1];
else if(a[i]-'0'+b[i]-'0'-10==c[i]-'0')
dp[i][1]+=dp[i-1][0]+1;
else if(a[i]-'0'+b[i]-'0'-10+1==c[i]-'0' && dp[i-1][1]!=0)
dp[i][1]+=dp[i-1][1];
}
long long ans=0;
for(int i=0;i<n;i++)
ans+=dp[i][0];
cout<<ans;
}