#include <bits/stdc++.h> using namespace std; int tab[1000006]; int il[1000006]; int il2[1000006]; deque <int> Q; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin>>n; for(int i=0; i<n; i++)cin>>tab[i]; sort (tab,tab+n); int naj=0,licz=1,ile=0; for(int i=0;i<n;i++) { if(tab[i]==tab[i+1]) { licz++; } else { naj=max(naj,licz); il[licz]++; il2[licz]++; licz=1; ile++; } } naj=max(naj,licz); int w1=0,w2=0; for(int i=1; i<=naj; i++) { while(il[i]--)Q.push_back(i); } while(!Q.empty()) { int x=Q.back(); Q.pop_back(); w1++; int s=0; while(!Q.empty()&&s+Q.front()<x) { s+=Q.front(); Q.pop_front(); } } for(int i=naj; i>0; i--) { while(il2[i]>0) { il2[i]--; w2++; int s=0; for(int j=i-1;j>0&&s<i-1;j--) { while(il2[j]>0&&s+j<i) { s+=j; il2[j]--; } } } } int w; w=min(w1,w2); cout<<w; 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 71 72 73 74 75 | #include <bits/stdc++.h> using namespace std; int tab[1000006]; int il[1000006]; int il2[1000006]; deque <int> Q; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin>>n; for(int i=0; i<n; i++)cin>>tab[i]; sort (tab,tab+n); int naj=0,licz=1,ile=0; for(int i=0;i<n;i++) { if(tab[i]==tab[i+1]) { licz++; } else { naj=max(naj,licz); il[licz]++; il2[licz]++; licz=1; ile++; } } naj=max(naj,licz); int w1=0,w2=0; for(int i=1; i<=naj; i++) { while(il[i]--)Q.push_back(i); } while(!Q.empty()) { int x=Q.back(); Q.pop_back(); w1++; int s=0; while(!Q.empty()&&s+Q.front()<x) { s+=Q.front(); Q.pop_front(); } } for(int i=naj; i>0; i--) { while(il2[i]>0) { il2[i]--; w2++; int s=0; for(int j=i-1;j>0&&s<i-1;j--) { while(il2[j]>0&&s+j<i) { s+=j; il2[j]--; } } } } int w; w=min(w1,w2); cout<<w; return 0; } |