一次快速排序就解决。
代码如下:
// Problem#: 1486
// Submission#: 560195
// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/
// All Copyright reserved by Informatic Lab of Sun Yat-sen University
#include <stdio.h>
int a[200000];
void ksort(int l, int h, int a[] ){
int e = h;
int p = l;
int temp;
if (h < l + 2)
return;
while (l < h) {
while (++l < e && a[l] <= a[p]);
while (--h > p && a[h] >= a[p]);
if (l < h) {
temp = a[l];
a[l]=a[h];
a[h]=temp;
}
}
temp = a[h];
a[h]=a[p];
a[p]=temp;
ksort(p, h, a);
ksort(l, e, a);
}
int main()
{
int n;
int i;
int t;
int k = 0;
while(scanf("%d", &n) && n != 0)
{
if(k != 0)
{
//printf("\n");
}
for(i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
ksort(0, n, a);
t = 1;
int counter = 0;
for(i = 0; i < n; i++)
{
if(a[i] == a[i + 1])
{
t++;
}
else
{
//printf("%d %d\n", a[i], t);
counter++;
t = 1;
}
}
printf("%d\n", counter);
k++;
}
}