Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <set>
- using namespace std;
- multiset<int> s;
- typedef long long ll;
- ll get(ll cur) {
- multiset<int> tmp = s;
- ll r = 0;
- while (!tmp.empty()) {
- ll top = *tmp.rbegin();
- tmp.erase(tmp.lower_bound(top));
- auto it = tmp.upper_bound(cur - top);
- if (it != tmp.begin()) {
- //cout << "error" << endl;
- it--;
- tmp.erase(it);
- }
- /*
- cout << "items : " << endl;
- for (auto item : tmp) {
- cout << item << " ";
- }
- //cout << endl;
- */
- r++;
- }
- return r;
- }
- int main() {
- ios_base::sync_with_stdio(false);
- cin.tie(0);
- int n, k; cin >> n >> k;
- vector<int> a(n);
- vector<int> cnt(k, 0);
- for (int i = 0; i < n; i++) {
- cin >> a[i];
- a[i]--;
- cnt[a[i]]++;
- }
- for (int i = 0; i < k; i++) {
- if (cnt[i]) {
- s.insert(cnt[i]);
- }
- }
- ll last = *s.rbegin();
- ll ans = last * get(last);
- //cout << "ans = " << ans << endl;
- //s.erase(*s.rbegin());
- for (ll cur = last; cur <= last + 8000; cur++) {
- ans = min(ans, cur * get(cur));
- }
- cout << ans << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement