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;
}