#include <iostream>
#include <vector>
#include <string>
int main() {
std::string wejscie[3];
std::cin >> wejscie[0] >> wejscie[1] >> wejscie[2];
std::vector<std::vector<long long> > liczby(3);
int n = wejscie[0].size();
for (int w = 0; w < 3; w++) {
for (int i = 0; i < n; i++) {
liczby[w].push_back( wejscie[w][i] - '0');
}
}
long long wynik = 0;
long long kolumny_poprawne = 0;
bool przeniesienie = false;
long long zerowa_kolumna = 0;
for (int i = n - 1; i >= 0; i--) {
//std::cout << "----- kolumna " << i << std::endl;
//std::cout << " " << liczby[0][i] << liczby[1][i] << liczby[2][i] << std::endl;
if (przeniesienie) {
if (liczby[0][i] + liczby[1][i] + 1 == liczby[2][i]) {
przeniesienie = false;
kolumny_poprawne++;
//std::cout << " przeniesienie, kolumny_poprawne++, przeniesienie -> false" << std::endl;
} else if ((liczby[0][i] + liczby[1][i] + 1) % 10 == liczby[2][i]) {
} else {
przeniesienie = false;
if (kolumny_poprawne > 0) {
wynik += ((1 + kolumny_poprawne) * kolumny_poprawne / 2);
wynik -= zerowa_kolumna;
//std::cout << " przeniesienie, wynik po dodaniu: " << wynik << std::endl;
}
kolumny_poprawne = 0;
zerowa_kolumna = 0;
}
} else if (liczby[0][i] + liczby[1][i] == liczby[2][i]) {
if (liczby[0][i] == 0 || liczby[1][i] == 0) {
zerowa_kolumna++;
}
kolumny_poprawne++;
//std:: cout << " kolumny_poprawne++" << std::endl;
} else {
if ((liczby[0][i] + liczby[1][i]) % 10 == liczby[2][i]) {
przeniesienie = true;
} else {
przeniesienie = false;
wynik += ((1 + kolumny_poprawne) * kolumny_poprawne / 2);
wynik -= zerowa_kolumna;
zerowa_kolumna = 0;
//std::cout << " dodanie kolumn: " << kolumny_poprawne << ", wynik: " << wynik << std::endl;
kolumny_poprawne = 0;
}
}
}
if (kolumny_poprawne > 0) {
wynik += ((1 + kolumny_poprawne) * kolumny_poprawne / 2);
wynik -= zerowa_kolumna;
//std:: cout << "koniec petli, dodanie do wyniku, wynik: " << wynik << std::endl;
}
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 67 68 69 | #include <iostream> #include <vector> #include <string> int main() { std::string wejscie[3]; std::cin >> wejscie[0] >> wejscie[1] >> wejscie[2]; std::vector<std::vector<long long> > liczby(3); int n = wejscie[0].size(); for (int w = 0; w < 3; w++) { for (int i = 0; i < n; i++) { liczby[w].push_back( wejscie[w][i] - '0'); } } long long wynik = 0; long long kolumny_poprawne = 0; bool przeniesienie = false; long long zerowa_kolumna = 0; for (int i = n - 1; i >= 0; i--) { //std::cout << "----- kolumna " << i << std::endl; //std::cout << " " << liczby[0][i] << liczby[1][i] << liczby[2][i] << std::endl; if (przeniesienie) { if (liczby[0][i] + liczby[1][i] + 1 == liczby[2][i]) { przeniesienie = false; kolumny_poprawne++; //std::cout << " przeniesienie, kolumny_poprawne++, przeniesienie -> false" << std::endl; } else if ((liczby[0][i] + liczby[1][i] + 1) % 10 == liczby[2][i]) { } else { przeniesienie = false; if (kolumny_poprawne > 0) { wynik += ((1 + kolumny_poprawne) * kolumny_poprawne / 2); wynik -= zerowa_kolumna; //std::cout << " przeniesienie, wynik po dodaniu: " << wynik << std::endl; } kolumny_poprawne = 0; zerowa_kolumna = 0; } } else if (liczby[0][i] + liczby[1][i] == liczby[2][i]) { if (liczby[0][i] == 0 || liczby[1][i] == 0) { zerowa_kolumna++; } kolumny_poprawne++; //std:: cout << " kolumny_poprawne++" << std::endl; } else { if ((liczby[0][i] + liczby[1][i]) % 10 == liczby[2][i]) { przeniesienie = true; } else { przeniesienie = false; wynik += ((1 + kolumny_poprawne) * kolumny_poprawne / 2); wynik -= zerowa_kolumna; zerowa_kolumna = 0; //std::cout << " dodanie kolumn: " << kolumny_poprawne << ", wynik: " << wynik << std::endl; kolumny_poprawne = 0; } } } if (kolumny_poprawne > 0) { wynik += ((1 + kolumny_poprawne) * kolumny_poprawne / 2); wynik -= zerowa_kolumna; //std:: cout << "koniec petli, dodanie do wyniku, wynik: " << wynik << std::endl; } std::cout << wynik << "\n"; return 0; } |
English