#include<bits/stdc++.h> using namespace std; const int MAXX=1e5*5+5; int tab[MAXX]; int cmp(int a, int b){ return tab[a]>tab[b]; } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; for(int i=0;i<n;i++){ int a; cin>>a; tab[a]++; } vector<int>liczby; for(int i=0;i<=n+2;i++){ liczby.push_back(i); } sort(liczby.begin(), liczby.end(), cmp); //for(auto x : liczby){ // cout<<x<<" "; //} int p=0; int k=n; int wynik=1; int suma=0; while(p<k){ //cout<<liczby[p]<<" "<<liczby[k]<<" "; //cout<<tab[liczby[p]]<<" "<<tab[liczby[k]]<<"\n"; suma+=tab[liczby[k]]; if(tab[liczby[p]]>suma){ k--; } if(tab[liczby[p]]<=suma){ wynik++; tab[liczby[k]]=suma-tab[liczby[p]]+1; suma=0; //cout<<tab[liczby[k]]<<" "; p++; } } cout<<wynik<<"\n"; 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 | #include<bits/stdc++.h> using namespace std; const int MAXX=1e5*5+5; int tab[MAXX]; int cmp(int a, int b){ return tab[a]>tab[b]; } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; for(int i=0;i<n;i++){ int a; cin>>a; tab[a]++; } vector<int>liczby; for(int i=0;i<=n+2;i++){ liczby.push_back(i); } sort(liczby.begin(), liczby.end(), cmp); //for(auto x : liczby){ // cout<<x<<" "; //} int p=0; int k=n; int wynik=1; int suma=0; while(p<k){ //cout<<liczby[p]<<" "<<liczby[k]<<" "; //cout<<tab[liczby[p]]<<" "<<tab[liczby[k]]<<"\n"; suma+=tab[liczby[k]]; if(tab[liczby[p]]>suma){ k--; } if(tab[liczby[p]]<=suma){ wynik++; tab[liczby[k]]=suma-tab[liczby[p]]+1; suma=0; //cout<<tab[liczby[k]]<<" "; p++; } } cout<<wynik<<"\n"; return 0; } |