#include <iostream>
#include <string>
using namespace std;
typedef long long ll;
string a, b, w;
enum TrackingType {
NotTracking,
TrackingCarry
};
ll R = 0;
int last_end = -2;
int reps = 1;
void emit(int begin, int end) {
//cout << "begin=" << begin << " end=" << end << '\n';
if (last_end + 1 == begin)
reps++;
else {
reps = 1;
}
R += reps;
last_end = end;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> a >> b >> w;
int L = a.length();
auto state = NotTracking;
int begin = -1;
for (auto i=0; i<L; i++) {
auto c = a[i]-'0'+b[i]-'0'-w[i]+'0';
//cout << '\n';
//cout << "state = " << state <<'\n';
//cout << "c=" << c << '\n';
if (c == 0) {
state = NotTracking;
begin = i;
emit(i,i);
}
switch (state) {
case NotTracking:
if (c == -1) {
state = TrackingCarry;
begin = i;
}
break;
case TrackingCarry:
if (c == 10) {
state = NotTracking;
emit(begin, i);
}
if (c!=10 && c!=9)
state = NotTracking;
if (c == -1) {
state = TrackingCarry;
begin = i;
}
break;
}
//cout << "state = " << state <<'\n';
}
//cout << "state = " << state <<'\n';
//cout << " reps = " << reps << '\n';
cout<<R<<'\n';
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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | #include <iostream> #include <string> using namespace std; typedef long long ll; string a, b, w; enum TrackingType { NotTracking, TrackingCarry }; ll R = 0; int last_end = -2; int reps = 1; void emit(int begin, int end) { //cout << "begin=" << begin << " end=" << end << '\n'; if (last_end + 1 == begin) reps++; else { reps = 1; } R += reps; last_end = end; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> a >> b >> w; int L = a.length(); auto state = NotTracking; int begin = -1; for (auto i=0; i<L; i++) { auto c = a[i]-'0'+b[i]-'0'-w[i]+'0'; //cout << '\n'; //cout << "state = " << state <<'\n'; //cout << "c=" << c << '\n'; if (c == 0) { state = NotTracking; begin = i; emit(i,i); } switch (state) { case NotTracking: if (c == -1) { state = TrackingCarry; begin = i; } break; case TrackingCarry: if (c == 10) { state = NotTracking; emit(begin, i); } if (c!=10 && c!=9) state = NotTracking; if (c == -1) { state = TrackingCarry; begin = i; } break; } //cout << "state = " << state <<'\n'; } //cout << "state = " << state <<'\n'; //cout << " reps = " << reps << '\n'; cout<<R<<'\n'; return 0; } |
English