#include<iostream> #include <vector> #include <map> #include<algorithm> using namespace std; map<int,int> wyst; vector<int> wiel; bool testl(const vector<int> &wiel, int licz) { vector<int> wm; int ind, fv; ind = 0; for (auto i: wiel) { if (ind >= licz) wm.push_back(i); ind++; } ind = 0; for (int lid = 0; lid < licz; lid++) { fv = wiel[lid]; while (ind < wm.size()) { if (wm[ind] < fv) { fv -= wm[ind]; ind++; } else { wm[ind] -= (fv - 1); break; } }; } return wm.size() == ind; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int liczba, el; cin >> liczba; for (int i=0; i < liczba; i++) { cin >> el; wyst[el]+=1; } for (auto i: wyst) wiel.push_back(i.second); sort(wiel.begin(), wiel.end(), greater<int>()); int lewy, prawy, sr; lewy = 1; prawy = liczba; while (lewy < prawy) { sr = (lewy + prawy)/2; // cout << lewy << " " << sr << " " << prawy << " \n"; if (sr == lewy) { if (testl(wiel,lewy)) { cout << lewy << "\n"; return 0; } else { cout << prawy << "\n"; return 0; }; } else { if (testl(wiel, sr)) prawy = sr; else lewy = sr; } } cout << 1 << "\n"; // cout << 1 << " == " << testl(wiel, 1) << "\n"; // cout << 2 << " == " << testl(wiel, 2) << "\n"; // cout << 3 << " == " << testl(wiel, 3) << "\n"; // for (auto i: wiel) // cout << i<< " "; // cout << "\n"; // for (auto i: wm) // cout << i.second << " "; // cout << " koniec\n"; }
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | #include<iostream> #include <vector> #include <map> #include<algorithm> using namespace std; map<int,int> wyst; vector<int> wiel; bool testl(const vector<int> &wiel, int licz) { vector<int> wm; int ind, fv; ind = 0; for (auto i: wiel) { if (ind >= licz) wm.push_back(i); ind++; } ind = 0; for (int lid = 0; lid < licz; lid++) { fv = wiel[lid]; while (ind < wm.size()) { if (wm[ind] < fv) { fv -= wm[ind]; ind++; } else { wm[ind] -= (fv - 1); break; } }; } return wm.size() == ind; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int liczba, el; cin >> liczba; for (int i=0; i < liczba; i++) { cin >> el; wyst[el]+=1; } for (auto i: wyst) wiel.push_back(i.second); sort(wiel.begin(), wiel.end(), greater<int>()); int lewy, prawy, sr; lewy = 1; prawy = liczba; while (lewy < prawy) { sr = (lewy + prawy)/2; // cout << lewy << " " << sr << " " << prawy << " \n"; if (sr == lewy) { if (testl(wiel,lewy)) { cout << lewy << "\n"; return 0; } else { cout << prawy << "\n"; return 0; }; } else { if (testl(wiel, sr)) prawy = sr; else lewy = sr; } } cout << 1 << "\n"; // cout << 1 << " == " << testl(wiel, 1) << "\n"; // cout << 2 << " == " << testl(wiel, 2) << "\n"; // cout << 3 << " == " << testl(wiel, 3) << "\n"; // for (auto i: wiel) // cout << i<< " "; // cout << "\n"; // for (auto i: wm) // cout << i.second << " "; // cout << " koniec\n"; } |