#include <bits/stdc++.h> using namespace std; #define endl "\n" #define ll long long #define ld long double #define ull unsigned long long void dbg_out() { cout << endl; } template<typename Head, typename... Tail> void dbg_out(Head H, Tail... T) { cout << ' ' << H; dbg_out(T...); } #define dbg(...) cout << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__) void solve() { ll n; cin >> n; vector<ll> list(n, 0), krotnosc; for(auto &el : list) cin >> el; map<ll, ll> mp; for(auto el : list) mp[el]++; for(auto el : mp){ krotnosc.push_back(el.second); } sort(krotnosc.begin(), krotnosc.end(), greater()); // for(auto el : krotnosc) cout << el << " "; // cout << endl; ll r = krotnosc.size()-1, res=0; for(ll l = 0; l <= r; l++){ ll suma = 0; while(l < r && suma+krotnosc[r] < krotnosc[l]){ suma += krotnosc[r]; r--; } // cout << "jeden: "; // dbg(suma); if(l < r && suma < krotnosc[l]-1){ // cout << "wykonane\n"; // dbg((krotnosc[l]-1) - suma); krotnosc[r] -= (krotnosc[l]-1) - suma; suma += (krotnosc[l]-1) - suma; } // cout << "dwa: "; // dbg(suma); res++; // for(auto el : krotnosc) cout << el << " "; // cout << endl; // dbg(l, r); } cout << res << endl; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // #ifndef ONLINE_JUDGE // freopen("../../in.in", "r", stdin); // freopen("../../out.out", "w", stdout); // #endif solve(); }
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 | #include <bits/stdc++.h> using namespace std; #define endl "\n" #define ll long long #define ld long double #define ull unsigned long long void dbg_out() { cout << endl; } template<typename Head, typename... Tail> void dbg_out(Head H, Tail... T) { cout << ' ' << H; dbg_out(T...); } #define dbg(...) cout << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__) void solve() { ll n; cin >> n; vector<ll> list(n, 0), krotnosc; for(auto &el : list) cin >> el; map<ll, ll> mp; for(auto el : list) mp[el]++; for(auto el : mp){ krotnosc.push_back(el.second); } sort(krotnosc.begin(), krotnosc.end(), greater()); // for(auto el : krotnosc) cout << el << " "; // cout << endl; ll r = krotnosc.size()-1, res=0; for(ll l = 0; l <= r; l++){ ll suma = 0; while(l < r && suma+krotnosc[r] < krotnosc[l]){ suma += krotnosc[r]; r--; } // cout << "jeden: "; // dbg(suma); if(l < r && suma < krotnosc[l]-1){ // cout << "wykonane\n"; // dbg((krotnosc[l]-1) - suma); krotnosc[r] -= (krotnosc[l]-1) - suma; suma += (krotnosc[l]-1) - suma; } // cout << "dwa: "; // dbg(suma); res++; // for(auto el : krotnosc) cout << el << " "; // cout << endl; // dbg(l, r); } cout << res << endl; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // #ifndef ONLINE_JUDGE // freopen("../../in.in", "r", stdin); // freopen("../../out.out", "w", stdout); // #endif solve(); } |