#include <bits/stdc++.h>
#define ll long long
#define pi std::pair<int, int>
#define pll std::pair<ll, ll>
#define vi std::vector<int>
#define vll std::vector<ll>
#define vpi std::vector<pi>
#define vpll std::vector<pll>
#define si std::set<int>
// jezeli przeniesienie psuje, to jest problem wszedzie wczesniej, bo jak usuniemy przeniesienie, to psuje sie wszystko co wymagalo przeniesienia
// czyli jezeli jest za duzo to skibidi nie da sie zrobic tak by ten fragment byl zawarty wraz z jakimis wczesniejszymi, mozemy sie tylko zastanawiac czy moze byc samemu albo z jakims pozniejszym
// jezeli jest za malo to tez psuje wszystko.
// jezeli jest idealnie to trzeba rozwazyc czy przez przeniesienie czy nie
void solve()
{
std::string a, b, c;
std::cin >> a >> b >> c;
ll ans = 0, ostatnie = 0, fragmenty = 0, przen = 0;
for (int i = a.size() - 1; i >= 0; i--)
{
int digA = a[i] - '0', digB = b[i] - '0', digC = c[i] - '0';
if ((digA + digB + przen) % 10 != digC)
{
if ((digA + digB) % 10 == digC)
{
fragmenty = 1;
if(digA + digB == digC) {
ans++;
przen = 0;
}
else
przen = 1;
}
else
{
fragmenty = 0;
przen = 0;
}
}
else
{
if (!przen)
fragmenty++;
if (digA + digB + przen == digC)
{
ans += fragmenty;
przen = 0;
}
else
przen = 1;
}
}
std::cout << ans << '\n';
}
int main()
{
std::ios_base::sync_with_stdio(0);
std::cin.tie(0);
int t = 1;
// std::cin >> t;
while (t--)
{
solve();
}
}
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 <bits/stdc++.h> #define ll long long #define pi std::pair<int, int> #define pll std::pair<ll, ll> #define vi std::vector<int> #define vll std::vector<ll> #define vpi std::vector<pi> #define vpll std::vector<pll> #define si std::set<int> // jezeli przeniesienie psuje, to jest problem wszedzie wczesniej, bo jak usuniemy przeniesienie, to psuje sie wszystko co wymagalo przeniesienia // czyli jezeli jest za duzo to skibidi nie da sie zrobic tak by ten fragment byl zawarty wraz z jakimis wczesniejszymi, mozemy sie tylko zastanawiac czy moze byc samemu albo z jakims pozniejszym // jezeli jest za malo to tez psuje wszystko. // jezeli jest idealnie to trzeba rozwazyc czy przez przeniesienie czy nie void solve() { std::string a, b, c; std::cin >> a >> b >> c; ll ans = 0, ostatnie = 0, fragmenty = 0, przen = 0; for (int i = a.size() - 1; i >= 0; i--) { int digA = a[i] - '0', digB = b[i] - '0', digC = c[i] - '0'; if ((digA + digB + przen) % 10 != digC) { if ((digA + digB) % 10 == digC) { fragmenty = 1; if(digA + digB == digC) { ans++; przen = 0; } else przen = 1; } else { fragmenty = 0; przen = 0; } } else { if (!przen) fragmenty++; if (digA + digB + przen == digC) { ans += fragmenty; przen = 0; } else przen = 1; } } std::cout << ans << '\n'; } int main() { std::ios_base::sync_with_stdio(0); std::cin.tie(0); int t = 1; // std::cin >> t; while (t--) { solve(); } } |
English