Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.36 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 l = *s.rbegin();
  54. ll r;
  55. if (s.size() > 1) {
  56. s.erase(l);
  57. r = *s.rbegin() + l;
  58. s.insert(l);
  59. } else {
  60. r = l * 2;
  61. }
  62. ll ans = 1000000000LL * 1000000000LL;
  63. for (ll cur = l; cur <= r; cur++) {
  64. ans = min(ans, cur * get(cur));
  65. }
  66. cout << ans << endl;
  67. return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement