#include <iostream> #include <cstdio> using namespace std; void quickSort(int tab[], int left, int right){ int i=left; int j=right; int x=tab[(left+right)>>1]; do{ while(tab[i]<x) i++; while(tab[j]>x) j--; if(i<=j){ int temp=tab[i]; tab[i]=tab[j]; tab[j]=temp; i++; j--; } }while(i<=j); if(left<j) quickSort(tab,left,j); if(right>i) quickSort(tab,i,right); } int main() { int n,l,li = 0, out = 0; scanf("%d", &n); int wystapienia[n] = {0}; for(int i = 0; i < n; i++){ scanf("%d", &l); wystapienia[l-1]++; } quickSort(wystapienia, 0, n-1); while(true){ l=-1; for(int i = n-1; i >=0; i--){ if(wystapienia[i] != 0){ if(i-1 < 0){ out++; l = -1; break; } else if(wystapienia[i-1] <= wystapienia[i]){ l = wystapienia[i]; li = i; break; } } } if(l == -1){ break; } int s = 0; for(int i = 0; i < n; i++){ if(s + wystapienia[i] >= l){ if(l == wystapienia[i]){ wystapienia[i] -= (l - (s + 1)); } break; } s += wystapienia[i]; wystapienia[i] = 0; } l = 0; wystapienia[li] = 0; out++; } printf("%d", out); 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 | #include <iostream> #include <cstdio> using namespace std; void quickSort(int tab[], int left, int right){ int i=left; int j=right; int x=tab[(left+right)>>1]; do{ while(tab[i]<x) i++; while(tab[j]>x) j--; if(i<=j){ int temp=tab[i]; tab[i]=tab[j]; tab[j]=temp; i++; j--; } }while(i<=j); if(left<j) quickSort(tab,left,j); if(right>i) quickSort(tab,i,right); } int main() { int n,l,li = 0, out = 0; scanf("%d", &n); int wystapienia[n] = {0}; for(int i = 0; i < n; i++){ scanf("%d", &l); wystapienia[l-1]++; } quickSort(wystapienia, 0, n-1); while(true){ l=-1; for(int i = n-1; i >=0; i--){ if(wystapienia[i] != 0){ if(i-1 < 0){ out++; l = -1; break; } else if(wystapienia[i-1] <= wystapienia[i]){ l = wystapienia[i]; li = i; break; } } } if(l == -1){ break; } int s = 0; for(int i = 0; i < n; i++){ if(s + wystapienia[i] >= l){ if(l == wystapienia[i]){ wystapienia[i] -= (l - (s + 1)); } break; } s += wystapienia[i]; wystapienia[i] = 0; } l = 0; wystapienia[li] = 0; out++; } printf("%d", out); return 0; } |