#include <cstdio>
#include <cstring>
using namespace std;
#define MAX 1000100
typedef long long I;
char b[3][MAX];
I r;
I p0;
int main() {
scanf(" %s %s %s ", b[0],b[1],b[2]);
int n = strlen(b[0]);
for(int i=0;i<3;i++)
for(int j=0;j<n;j++) b[i][j]-='0';
I t=0;
for(int i=n-1;i >= 0;i--) {
if(b[0][i] + b[1][i] + t == b[2][i]) {
p0++;
t=0;
r+=p0;
} else if (b[0][i] + b[1][i] + t == b[2][i] + 10) {
t = 1;
} else if (t == 1 && b[0][i] + b[1][i] == b[2][i]) {
t=0;
p0=1;
r+=p0;
} else if (t == 1 && b[0][i] + b[1][i] == b[2][i] + 10) {
t=1;
p0=0;
} else {
p0=0;
t=0;
}
// fprintf(stderr, "%d: p0:%lld t:%lld r:%lld %d+%d=%d\n",i,p0,t,r,int(b[0][i]), int(b[1][i]), int(b[2][i]));
}
printf("%lld\n",r);
}
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 | #include <cstdio> #include <cstring> using namespace std; #define MAX 1000100 typedef long long I; char b[3][MAX]; I r; I p0; int main() { scanf(" %s %s %s ", b[0],b[1],b[2]); int n = strlen(b[0]); for(int i=0;i<3;i++) for(int j=0;j<n;j++) b[i][j]-='0'; I t=0; for(int i=n-1;i >= 0;i--) { if(b[0][i] + b[1][i] + t == b[2][i]) { p0++; t=0; r+=p0; } else if (b[0][i] + b[1][i] + t == b[2][i] + 10) { t = 1; } else if (t == 1 && b[0][i] + b[1][i] == b[2][i]) { t=0; p0=1; r+=p0; } else if (t == 1 && b[0][i] + b[1][i] == b[2][i] + 10) { t=1; p0=0; } else { p0=0; t=0; } // fprintf(stderr, "%d: p0:%lld t:%lld r:%lld %d+%d=%d\n",i,p0,t,r,int(b[0][i]), int(b[1][i]), int(b[2][i])); } printf("%lld\n",r); } |
English