#include <bits/stdc++.h>
char s[4][1000009];
int N,mb[1000009],m2[1000009];
signed main(void) {
scanf("%s",s[1]+1);
scanf("%s",s[2]+1);
scanf("%s",s[3]+1);
N=strlen(s[1]+1);
for(int i=1;i<=N;i++) {
int a=s[1][i]-'0';
int b=s[2][i]-'0';
int c=s[3][i]-'0';
if(c==(a+b)%10) {
mb[i]=0;
if(a+b>=10) m2[i]=1;
} else if(c==(a+b+1)%10) {
mb[i]=1;
if(a+b>=9) m2[i]=1;
} else {
mb[i]=m2[i]=-1;
}
}
int l=1,ct=0;
long long as=0;
for(int i=1;i<=N;i++) {
if(mb[i]==-1) {
l=i+1;
ct=0;
continue;
}
if(m2[i]!=mb[i-1]) {
l=std::max(l,i);
ct=0;
}
if(m2[i]==0) ct++;
if(mb[i]==0) {
as+=ct;
}
}
printf("%lld",as);
}
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 | #include <bits/stdc++.h> char s[4][1000009]; int N,mb[1000009],m2[1000009]; signed main(void) { scanf("%s",s[1]+1); scanf("%s",s[2]+1); scanf("%s",s[3]+1); N=strlen(s[1]+1); for(int i=1;i<=N;i++) { int a=s[1][i]-'0'; int b=s[2][i]-'0'; int c=s[3][i]-'0'; if(c==(a+b)%10) { mb[i]=0; if(a+b>=10) m2[i]=1; } else if(c==(a+b+1)%10) { mb[i]=1; if(a+b>=9) m2[i]=1; } else { mb[i]=m2[i]=-1; } } int l=1,ct=0; long long as=0; for(int i=1;i<=N;i++) { if(mb[i]==-1) { l=i+1; ct=0; continue; } if(m2[i]!=mb[i-1]) { l=std::max(l,i); ct=0; } if(m2[i]==0) ct++; if(mb[i]==0) { as+=ct; } } printf("%lld",as); } |
English