Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.29 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <set>
  4.  
  5. using namespace std;
  6.  
  7. multiset<int> s;
  8.  
  9. typedef long long ll;
  10.  
  11. ll get(ll cur) {
  12. multiset<int> tmp = s;
  13. ll r = 0;
  14. while (!tmp.empty()) {
  15.  
  16. ll top = *tmp.rbegin();
  17. tmp.erase(tmp.lower_bound(top));
  18. auto it = tmp.upper_bound(cur - top);
  19. if (it != tmp.begin()) {
  20. //cout << "error" << endl;
  21. it--;
  22. tmp.erase(it);
  23. }
  24. /*
  25. cout << "items : " << endl;
  26. for (auto item : tmp) {
  27. cout << item << " ";
  28. }
  29. //cout << endl;
  30. */
  31. r++;
  32. }
  33. return r;
  34. }
  35.  
  36. int main() {
  37. ios_base::sync_with_stdio(false);
  38. cin.tie(0);
  39. int n, k; cin >> n >> k;
  40. vector<int> a(n);
  41. vector<int> cnt(k, 0);
  42. for (int i = 0; i < n; i++) {
  43. cin >> a[i];
  44. a[i]--;
  45. cnt[a[i]]++;
  46. }
  47. for (int i = 0; i < k; i++) {
  48. if (cnt[i]) {
  49. s.insert(cnt[i]);
  50. }
  51. }
  52.  
  53. ll last = *s.rbegin();
  54.  
  55. ll ans = last * get(last);
  56. //cout << "ans = " << ans << endl;
  57. //s.erase(*s.rbegin());
  58. for (ll cur = last; cur <= last + 8000; cur++) {
  59. ans = min(ans, cur * get(cur));
  60. }
  61. cout << ans << endl;
  62. return 0;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement