#include <bits/stdc++.h> using namespace std; #define speed ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0) #define vi vector<int> #define pb push_back vi liczby; vi ilosci; int main() { int n,m,lewa,prawa; cin>>n; for (int i=0; i<n; i++) { cin>>m; liczby.pb(m); } if (n==2 && liczby[0]==liczby[1]) { cout<<1; return 0; } sort(liczby.begin(), liczby.end()); for (int i=0; i<n; i++) { if (i==0) { ilosci.pb(1); } else { if (liczby[i]==liczby[i-1]) { ilosci[ilosci.size()-1]++; } else { ilosci.pb(1); } } } sort(ilosci.rbegin(), ilosci.rend()); lewa=0; prawa=ilosci.size()-1; int suma=ilosci[lewa]; int wynik=0; while (lewa<=prawa) { suma=0; while (ilosci[lewa]>suma && lewa!=prawa) { suma+=ilosci[prawa]; prawa--; } if (ilosci[lewa]-1<suma) { ilosci[prawa+1]=suma; ilosci[prawa+1]-=(ilosci[lewa]-1); suma-=ilosci[prawa+1]; prawa++; } wynik++; lewa++; } 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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | #include <bits/stdc++.h> using namespace std; #define speed ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0) #define vi vector<int> #define pb push_back vi liczby; vi ilosci; int main() { int n,m,lewa,prawa; cin>>n; for (int i=0; i<n; i++) { cin>>m; liczby.pb(m); } if (n==2 && liczby[0]==liczby[1]) { cout<<1; return 0; } sort(liczby.begin(), liczby.end()); for (int i=0; i<n; i++) { if (i==0) { ilosci.pb(1); } else { if (liczby[i]==liczby[i-1]) { ilosci[ilosci.size()-1]++; } else { ilosci.pb(1); } } } sort(ilosci.rbegin(), ilosci.rend()); lewa=0; prawa=ilosci.size()-1; int suma=ilosci[lewa]; int wynik=0; while (lewa<=prawa) { suma=0; while (ilosci[lewa]>suma && lewa!=prawa) { suma+=ilosci[prawa]; prawa--; } if (ilosci[lewa]-1<suma) { ilosci[prawa+1]=suma; ilosci[prawa+1]-=(ilosci[lewa]-1); suma-=ilosci[prawa+1]; prawa++; } wynik++; lewa++; } cout<<wynik; return 0; } |