fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. vector<int> trans;
  4. //1 - zgadza sie bez pusha
  5. //2 - zgadza sie i push
  6. //3 - potrzebuje pusz i wtedy ok
  7. //4 - potrzbuje pusz i wtedy pusz
  8. //5 - kodon stop
  9. const int s = 1e6+9;
  10. bool valid[s];
  11. int main() {
  12. ios_base::sync_with_stdio(false);
  13. cin.tie(NULL);
  14. cout.tie(0);
  15. string a,b,c;
  16. cin>>a>>b>>c;
  17. reverse(a.begin(),a.end());
  18. reverse(b.begin(),b.end());
  19. reverse(c.begin(),c.end());
  20. int n = a.length();
  21. for (int i = 0; i < n; i++) {
  22. int f = a[i] - '0';
  23. int s = b[i] - '0';
  24. int goal = c[i] - '0';
  25. if (f + s == goal) {
  26. trans.push_back(1);
  27. continue;
  28. }
  29. if ((f+s)-10 == goal) {
  30. trans.push_back(2);
  31. continue;
  32. }
  33. if (f+s+1 == goal) {
  34. trans.push_back(3);
  35. continue;
  36. }
  37. if ((f+s+1)-10 == goal) {
  38. trans.push_back(4);
  39. continue;
  40. }
  41. trans.push_back(5);
  42. }
  43. int count = 0;
  44. int last = -1;
  45. int ans = 0;
  46. for (int i = 0; i<n; i++) {
  47. if (trans[i] == 1) {
  48. if (last == 3) {
  49. if (valid[i]) {
  50. count++;
  51. }
  52. }else {
  53. ans += count*(count+1)/2;
  54. count = 1;
  55. }
  56. valid[i+1] = true;
  57. }
  58. if (trans[i] == 2) {
  59. if (!(last == 1 or last == 3)) {
  60. ans += count*(count+1)/2;
  61. count = 0;
  62. }
  63. valid[i+1] = true;
  64. }
  65. if (trans[i] == 3) {
  66. if (!(last == 2 or last == 4)) {
  67. ans += count*(count+1)/2;
  68. count = 0;
  69. }else {
  70. if (valid[i]) {
  71. count++;
  72. }
  73. }
  74. valid[i+1]=valid[i];
  75. }
  76. if (trans[i] == 4) {
  77. if (last != 2) {
  78. ans += count*(count+1)/2;
  79. count=0;
  80. }
  81. valid[i+1]=valid[i];
  82. }
  83. if (trans[i] == 5) {
  84. ans += count*(count+1)/2;
  85. count=0;
  86. valid[i] = false;
  87. }
  88. last = trans[i];
  89. }
  90. ans += count*(count+1)/2;
  91. cout << ans << endl;
  92. }
Success #stdin #stdout 0.01s 5324KB
stdin
2040515469
1206157499
2682473668
stdout
0