#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
#include <cmath>
int main()
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
std::string linia1;
std::string linia2;
std::string suma;
std::cin >> linia1;
std::cin >> linia2;
std::cin >> suma;
std::reverse(linia1.begin(), linia1.end());
std::reverse(linia2.begin(), linia2.end());
std::reverse(suma.begin(), suma.end());
for (int i = 0; i < linia1.size(); ++i)
{
linia1[i] -= '0';
linia2[i] -= '0';
suma[i] -= '0';
}
long long ileElementowWGrupie = 0;
long long wynik = 0;
int n = linia1.size();
for (int i = n - 1; i >= 0; --i)
{
if (linia1[i] + linia2[i] == suma[i])
{
ileElementowWGrupie++;
continue;
}
if (linia1[i] + linia2[i] + 1 == suma[i])
{
while (i >= 0)
{
i--;
if (linia1[i] + linia2[i] + 1 != 10 + suma[i])
break;
}
if (i>=0 && linia1[i] + linia2[i] == 10 + suma[i])
{
ileElementowWGrupie++;
continue;
}
else
{
i++;
wynik += ileElementowWGrupie * (ileElementowWGrupie + 1) / 2;
ileElementowWGrupie = 0;
}
}
wynik += ileElementowWGrupie * (ileElementowWGrupie + 1) / 2;
ileElementowWGrupie = 0;
}
wynik += ileElementowWGrupie * (ileElementowWGrupie + 1) / 2;
std::cout << wynik << "\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 | #include <iostream> #include <vector> #include <set> #include <algorithm> #include <cmath> int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); std::string linia1; std::string linia2; std::string suma; std::cin >> linia1; std::cin >> linia2; std::cin >> suma; std::reverse(linia1.begin(), linia1.end()); std::reverse(linia2.begin(), linia2.end()); std::reverse(suma.begin(), suma.end()); for (int i = 0; i < linia1.size(); ++i) { linia1[i] -= '0'; linia2[i] -= '0'; suma[i] -= '0'; } long long ileElementowWGrupie = 0; long long wynik = 0; int n = linia1.size(); for (int i = n - 1; i >= 0; --i) { if (linia1[i] + linia2[i] == suma[i]) { ileElementowWGrupie++; continue; } if (linia1[i] + linia2[i] + 1 == suma[i]) { while (i >= 0) { i--; if (linia1[i] + linia2[i] + 1 != 10 + suma[i]) break; } if (i>=0 && linia1[i] + linia2[i] == 10 + suma[i]) { ileElementowWGrupie++; continue; } else { i++; wynik += ileElementowWGrupie * (ileElementowWGrupie + 1) / 2; ileElementowWGrupie = 0; } } wynik += ileElementowWGrupie * (ileElementowWGrupie + 1) / 2; ileElementowWGrupie = 0; } wynik += ileElementowWGrupie * (ileElementowWGrupie + 1) / 2; std::cout << wynik << "\n"; return 0; } |
English