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