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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <string>
#include <iostream>

using namespace std;

#define N 1000000+1

int x[N];
int y[N];
int z[N];

int main() {
  string sx, sy, sz;
  cin>>sx>>sy>>sz;
  int n = sx.size();
  for(int i = 0; i < n; i++) {
    x[i] = sx[i] - '0';
  }
  for(int i = 0; i < n; i++) {
    y[i] = sy[i] - '0';
  }
  for(int i = 0; i < n; i++) {
    z[i] = sz[i] - '0';
  }
  long long t = 0;
  int c = 0;
  int m = 0;
  for(int i = n - 1; i >= 0; i--) {
    if(x[i]+y[i] == z[i] && c == 0) {
      m++;
      t += m;
    }
    else if(x[i]+y[i] == z[i] + 10 && c == 0) {
      c = 1;
      m++;
    }
    else if(x[i]+y[i] == z[i] + 10 && c == 1) {
      m = 1;
    }
    else if(x[i]+y[i] == z[i] && c == 1) {
      c = 0;
      m = 1;
      t += 1;
    }
    else if(x[i]+y[i] + 1 == z[i] + 10 && c == 1) {
      continue;
    }
    else if(x[i]+y[i] + 1 == z[i] && c == 1) {
      c = 0;
      t += m;
    }
    else {
      m = c = 0;
    }
  }
  cout<<t<<"\n";
  return 0;
}