#include #include #include #include #include #include #include #include #include namespace ranges = std::ranges; namespace views = std::views; const auto parse_input() { std::pair, std::vector> result; for (int a, b; std::cin >> a >> b;) { result.first.push_back(a); result.second.push_back(b); } return result; } void part1(auto input) { auto &[A, B] = input; ranges::sort(A); ranges::sort(B); int sum = 0; for (const auto& [a, b] : views::zip(A, B)) { sum += std::abs(a - b); } std::println("{}", sum); } void part2(auto input) { auto &[A, B] = input; std::map freq_A, freq_B; for (auto a : A) { freq_A[a]++; } for (auto b : B) { freq_B[b]++; } int sum = 0; for (const auto& [a, b] : freq_A) { sum += a * b * freq_B[a]; } std::println("{}", sum); } int main() { const auto input = parse_input(); #ifndef NO_PART1 part1(input); #endif #ifndef NO_PART2 part2(input); #endif return 0; }