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