#include <cstdio>
#include <cstring>
static unsigned char x[1000001];
static unsigned char y[1000001];
static unsigned char z[1000001];
static unsigned long long mem[1000000][2];
int main(void)
{
unsigned n;
fgets((char *) x, sizeof(x), stdin);
fgets((char *) y, sizeof(y), stdin);
fgets((char *) z, sizeof(z), stdin);
n = strlen((const char *) x) - 1;
for (unsigned i = 0; i < n; i++) {
x[i] -= '0';
y[i] -= '0';
z[i] -= '0';
}
for (unsigned i = 0; i < n; i++) {
for (unsigned c = 0; c <= 1; c++) {
unsigned v = x[i] + y[i] + c;
if (v % 10 == z[i]) {
unsigned cn = v >= 10;
if (!cn)
mem[i][c]++;
if (i)
mem[i][c] += mem[i - 1][cn];
}
}
}
unsigned long long wynik = 0;
for (unsigned i = 0; i < n; i++)
wynik += mem[i][0];
printf("%llu\n", wynik);
return 0;
}
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 | #include <cstdio> #include <cstring> static unsigned char x[1000001]; static unsigned char y[1000001]; static unsigned char z[1000001]; static unsigned long long mem[1000000][2]; int main(void) { unsigned n; fgets((char *) x, sizeof(x), stdin); fgets((char *) y, sizeof(y), stdin); fgets((char *) z, sizeof(z), stdin); n = strlen((const char *) x) - 1; for (unsigned i = 0; i < n; i++) { x[i] -= '0'; y[i] -= '0'; z[i] -= '0'; } for (unsigned i = 0; i < n; i++) { for (unsigned c = 0; c <= 1; c++) { unsigned v = x[i] + y[i] + c; if (v % 10 == z[i]) { unsigned cn = v >= 10; if (!cn) mem[i][c]++; if (i) mem[i][c] += mem[i - 1][cn]; } } } unsigned long long wynik = 0; for (unsigned i = 0; i < n; i++) wynik += mem[i][0]; printf("%llu\n", wynik); return 0; } |
English