#include <bits/stdc++.h> using namespace std; const int MAX = 5e5+1; int zlicz[MAX]; multiset<int> a; int main(){ cin.tie(0); ios_base::sync_with_stdio(0); int n; cin >> n; int x; for(int i = 0; i < n; i++){ cin >> x; zlicz[x]++; } for(int i = 1; i < MAX; i++){ if(zlicz[i] > 0){ a.insert(zlicz[i]); } } int wynik = 0, ile, reszta; while(!a.empty()){ wynik++; ile = *a.rbegin(); a.erase(--a.end()); ile--; while(ile > 0 && !a.empty()) { if(*a.begin() <= ile){ ile -= *a.begin(); a.erase(a.begin()); } else{ ile = 0; reszta = *a.begin() - ile; a.erase(a.begin()); a.insert(reszta); } } } cout << wynik; return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #include <bits/stdc++.h> using namespace std; const int MAX = 5e5+1; int zlicz[MAX]; multiset<int> a; int main(){ cin.tie(0); ios_base::sync_with_stdio(0); int n; cin >> n; int x; for(int i = 0; i < n; i++){ cin >> x; zlicz[x]++; } for(int i = 1; i < MAX; i++){ if(zlicz[i] > 0){ a.insert(zlicz[i]); } } int wynik = 0, ile, reszta; while(!a.empty()){ wynik++; ile = *a.rbegin(); a.erase(--a.end()); ile--; while(ile > 0 && !a.empty()) { if(*a.begin() <= ile){ ile -= *a.begin(); a.erase(a.begin()); } else{ ile = 0; reszta = *a.begin() - ile; a.erase(a.begin()); a.insert(reszta); } } } cout << wynik; return 0; } |