#include <bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN = 1e6+5;
int a[MAXN],b[MAXN],c[MAXN],dp[MAXN],w[MAXN]; //a+b=c
int32_t main(){
ios_base::sync_with_stdio(0);
string s1,s2,s3; cin >> s1 >> s2 >> s3;
for(int i=0;i<s1.size();i++) a[i+1] = s1[i]-'0';
for(int i=0;i<s2.size();i++) b[i+1] = s2[i]-'0';
for(int i=0;i<s3.size();i++) c[i+1] = s3[i]-'0';
int n = s1.size();
int ans=0;
for(int i=1;i<=n;i++){
int val = a[i]+b[i], carry = 0;
for(int j=i;j>0;j--){
val = a[j] + b[j] + carry;
if(val%10 != c[j]) break;
if(val<10){
dp[i] += dp[j-1] + 1;
break;
}
else{
carry=1;
if(j==1) c[1] = -1;
}
}
ans += dp[i];
}
cout << ans << '\n';
}
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 | #include <bits/stdc++.h> using namespace std; #define int long long const int MAXN = 1e6+5; int a[MAXN],b[MAXN],c[MAXN],dp[MAXN],w[MAXN]; //a+b=c int32_t main(){ ios_base::sync_with_stdio(0); string s1,s2,s3; cin >> s1 >> s2 >> s3; for(int i=0;i<s1.size();i++) a[i+1] = s1[i]-'0'; for(int i=0;i<s2.size();i++) b[i+1] = s2[i]-'0'; for(int i=0;i<s3.size();i++) c[i+1] = s3[i]-'0'; int n = s1.size(); int ans=0; for(int i=1;i<=n;i++){ int val = a[i]+b[i], carry = 0; for(int j=i;j>0;j--){ val = a[j] + b[j] + carry; if(val%10 != c[j]) break; if(val<10){ dp[i] += dp[j-1] + 1; break; } else{ carry=1; if(j==1) c[1] = -1; } } ans += dp[i]; } cout << ans << '\n'; } |
English