#include<iostream> #include<vector> #include<algorithm> using namespace std; int t[500010]; vector< pair<int,int> >v; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,v1,kt=0,wyn=0,il=0,ktt; cin>>n; for(int i=0;i<n;i++){ cin>>v1; t[v1]++; } for(int i=0;i<=n;i++){ if(t[i])v.push_back({t[i],0}); } sort(v.begin(),v.end()); for(int i=1;i<v.size();i++)v[i].second=v[i-1].second+v[i-1].first; ktt=v.size()-1; while(kt<=ktt){ wyn++; il+=v[ktt].first-1; if(kt+1==v.size())break; while(il>=v[kt+1].second){ kt++; if(kt+1==v.size())break; } ktt--; } cout<<wyn; 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 | #include<iostream> #include<vector> #include<algorithm> using namespace std; int t[500010]; vector< pair<int,int> >v; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,v1,kt=0,wyn=0,il=0,ktt; cin>>n; for(int i=0;i<n;i++){ cin>>v1; t[v1]++; } for(int i=0;i<=n;i++){ if(t[i])v.push_back({t[i],0}); } sort(v.begin(),v.end()); for(int i=1;i<v.size();i++)v[i].second=v[i-1].second+v[i-1].first; ktt=v.size()-1; while(kt<=ktt){ wyn++; il+=v[ktt].first-1; if(kt+1==v.size())break; while(il>=v[kt+1].second){ kt++; if(kt+1==v.size())break; } ktt--; } cout<<wyn; return 0; } |