#include <iostream>
#include <vector>
typedef long long ll;
using namespace std;
//037523
//040834
//978367
// kod -> 1 => sum == cyfra //tworzy sam siebie
// brakuje jednego i przesyla dalej -> 2 // nie tworzy sam siebie
// brakuje jednego -> -1 // nie tworzy sam siebie
// przesyla dalej -> // nie tworzy sam siebie
// kod -> 0 => sum != cyfra // nie tworzy sam siebie
constexpr int mx = 1e6 + 5;
//zakonczone, wysyla 1
ll result[mx][2];
int main()
{
cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0);
string s[3];
cin >> s[0] >> s[1] >> s[2];
ll wynik = 0L;
int sum;
int a, b, c;
int dl = s[0].size();
for (int i = dl - 1; i >= 0; i--) {
a = s[0][i] - '0';
b = s[1][i] - '0';
c = s[2][i] - '0';
sum = a + b;
if (sum == c) {
result[i][0] = result[i + 1][0] + 1;
}
else if (sum + 1 == c) {
result[i][0] = result[i + 1][1];
}
if (sum == c + 10) {
result[i][1] = result[i + 1][0] + 1;
}
else if (sum + 1 == c + 10) {
result[i][1] = result[i + 1][1];
}
wynik += result[i][0];
}
/*cout << "PELNE (1)\n";
for (int i = 1; i <= s[0].size(); i++){
cout << result[i][0] << ' ';
}
cout << '\n';
cout << "WYSYLA JEDEN (+1)\n";
for (int i = 1; i <= s[0].size(); i++) {
cout << result[i][1] << ' ';
}
cout << '\n';*/
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 70 71 72 73 74 75 | #include <iostream> #include <vector> typedef long long ll; using namespace std; //037523 //040834 //978367 // kod -> 1 => sum == cyfra //tworzy sam siebie // brakuje jednego i przesyla dalej -> 2 // nie tworzy sam siebie // brakuje jednego -> -1 // nie tworzy sam siebie // przesyla dalej -> // nie tworzy sam siebie // kod -> 0 => sum != cyfra // nie tworzy sam siebie constexpr int mx = 1e6 + 5; //zakonczone, wysyla 1 ll result[mx][2]; int main() { cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0); string s[3]; cin >> s[0] >> s[1] >> s[2]; ll wynik = 0L; int sum; int a, b, c; int dl = s[0].size(); for (int i = dl - 1; i >= 0; i--) { a = s[0][i] - '0'; b = s[1][i] - '0'; c = s[2][i] - '0'; sum = a + b; if (sum == c) { result[i][0] = result[i + 1][0] + 1; } else if (sum + 1 == c) { result[i][0] = result[i + 1][1]; } if (sum == c + 10) { result[i][1] = result[i + 1][0] + 1; } else if (sum + 1 == c + 10) { result[i][1] = result[i + 1][1]; } wynik += result[i][0]; } /*cout << "PELNE (1)\n"; for (int i = 1; i <= s[0].size(); i++){ cout << result[i][0] << ' '; } cout << '\n'; cout << "WYSYLA JEDEN (+1)\n"; for (int i = 1; i <= s[0].size(); i++) { cout << result[i][1] << ' '; } cout << '\n';*/ cout << wynik << '\n'; return 0; } |
English