#include<bits/stdc++.h>
#define fi first
#define se second
using namespace std;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n,a;
cin>>n;
vector<int>v(n+2);
vector<int>tab;
for(int i=0;i<n;i++){
cin>>a;
v[a]++;
}
for(int i=0;i<n+2;i++){
if(v[i]){
tab.push_back(v[i]);
}
}
sort(tab.begin(),tab.end());
int ile=0;
int last=tab.size()-1,first=0;
while(last!=first){
int s=0;
while(tab[last]>s+1&&last!=first){
if(s+tab[first]<tab[last]){s+=tab[first];tab[first]=0;first++;}else{
tab[first]=tab[first]-(tab[last]-s-1);
s=tab[last]-1;
}
}
tab[last]=0;
if(last!=first){
last--;
}
ile++;
/*for(int i=0;i<tab.size();i++){
cout<<tab[i]<<" ";
}cout<<"\n";*/
}
if(tab[first]!=0){ile++;}
cout<<ile;
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 | #include<bits/stdc++.h> #define fi first #define se second using namespace std; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n,a; cin>>n; vector<int>v(n+2); vector<int>tab; for(int i=0;i<n;i++){ cin>>a; v[a]++; } for(int i=0;i<n+2;i++){ if(v[i]){ tab.push_back(v[i]); } } sort(tab.begin(),tab.end()); int ile=0; int last=tab.size()-1,first=0; while(last!=first){ int s=0; while(tab[last]>s+1&&last!=first){ if(s+tab[first]<tab[last]){s+=tab[first];tab[first]=0;first++;}else{ tab[first]=tab[first]-(tab[last]-s-1); s=tab[last]-1; } } tab[last]=0; if(last!=first){ last--; } ile++; /*for(int i=0;i<tab.size();i++){ cout<<tab[i]<<" "; }cout<<"\n";*/ } if(tab[first]!=0){ile++;} cout<<ile; return 0;} |
English