#include <bits/stdc++.h>
int main() {
long long answer = 0;
std::string a, b, c;
std::cin >> a >> b >> c;
int n = a.size();
auto info = [&](int i) -> std::pair<int, int> {
int da, db, dc;
da = a[i] - '0';
db = b[i] - '0';
dc = c[i] - '0';
return {da + db, dc};
};
long long block_cnt = 0;
int carry = 0;
for (int i = 0; i < n; i++) {
auto [da, dc] = info(i);
if (carry) {
if (da >= 10 && da == 10 + dc) {
carry = 0;
block_cnt++;
} else if (da + 1 >= 10 && da + 1 == 10 + dc) {
} else {
carry = 0;
answer += ((block_cnt) * (block_cnt + 1)) / (long long)2;
block_cnt = 0;
i--;
}
} else {
if (da == dc) {
block_cnt++;
} else if (da + 1 == dc) {
carry = 1;
} else {
answer += ((block_cnt) * (block_cnt + 1)) / (long long)2;
block_cnt = 0;
}
}
}
answer += ((block_cnt) * (block_cnt + 1)) / (long long)2;
std::cout << answer << "\n";
}
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 | #include <bits/stdc++.h> int main() { long long answer = 0; std::string a, b, c; std::cin >> a >> b >> c; int n = a.size(); auto info = [&](int i) -> std::pair<int, int> { int da, db, dc; da = a[i] - '0'; db = b[i] - '0'; dc = c[i] - '0'; return {da + db, dc}; }; long long block_cnt = 0; int carry = 0; for (int i = 0; i < n; i++) { auto [da, dc] = info(i); if (carry) { if (da >= 10 && da == 10 + dc) { carry = 0; block_cnt++; } else if (da + 1 >= 10 && da + 1 == 10 + dc) { } else { carry = 0; answer += ((block_cnt) * (block_cnt + 1)) / (long long)2; block_cnt = 0; i--; } } else { if (da == dc) { block_cnt++; } else if (da + 1 == dc) { carry = 1; } else { answer += ((block_cnt) * (block_cnt + 1)) / (long long)2; block_cnt = 0; } } } answer += ((block_cnt) * (block_cnt + 1)) / (long long)2; std::cout << answer << "\n"; } |
English