From dfbc0ab51d29d2d175e03134229669f8fc91280b Mon Sep 17 00:00:00 2001 From: crupest Date: Mon, 12 Oct 2020 21:01:59 +0800 Subject: import(life): Add 2020-algorithm-contest. --- works/life/2020-algorithm-contest/code/2.cpp | 54 ++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 works/life/2020-algorithm-contest/code/2.cpp (limited to 'works/life/2020-algorithm-contest/code/2.cpp') diff --git a/works/life/2020-algorithm-contest/code/2.cpp b/works/life/2020-algorithm-contest/code/2.cpp new file mode 100644 index 0000000..2d5fded --- /dev/null +++ b/works/life/2020-algorithm-contest/code/2.cpp @@ -0,0 +1,54 @@ +#include +#include +#include +#include + +int main() +{ + int size; + std::cin >> size; + int target; + std::cin >> target; + + std::map nums; + + for (int i = 0; i < size; i++) + { + int v; + std::cin >> v; + + nums[v]++; + } + + std::vector counts; + std::vector> sets; + + for (const auto &pair : nums) + { + auto iter = std::lower_bound(counts.cbegin(), counts.cend(), pair.second); + if (iter != counts.cend() && *iter == pair.second) + { + sets[iter - counts.cbegin()].push_back(pair.first); + } + else + { + const auto offset = iter - counts.cbegin(); + counts.insert(iter, pair.second); + sets.insert(sets.cbegin() + offset, std::vector{pair.first}); + } + } + + if (target > counts.size()) + { + std::cout << 0; + } + else + { + const auto &set = sets[counts.size() - target]; + std::cout << set.size() << '\n'; + for (auto i : set) + std::cout << i << ' '; + } + + return 0; +} -- cgit v1.2.3