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