#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; } |
English