| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
用二叉检索树、堆排In Reply To:怎么改才能不超时呢?望指点 Posted by:minidick at 2003-12-20 18:05:41 > #include <stdio.h>
>
> void quick_sort(long *x, int low, int high)
> {
> int i, j; long t;
> i = low;
> j = high;
> t = *(x+low);
> while (i<j)
> {
> while (i<j && *(x+j)>t)
> {
> j--;
> }
>
> if (i<j)
> {
> *(x+i) = *(x+j);
> i++;
> }
>
> while (i<j && *(x+i)<=t)
> {
> i++;
> }
>
> if (i<j)
> {
> *(x+j) = *(x+i);
> j--;
> }
> *(x+i) = t;
> quick_sort(x,low,i-1);
> quick_sort(x,i+1,high);
> }
> }
>
> main()
> {
> long a[100000];char c;
> int i, j, n;
> scanf("%d", &n);
> for (i = 0; i < n; i++) {
> a[i] = 0L;
> for (j = 0; j < 7; j++) {
> scanf("%c", &c);
> switch (c) {
> case 'A': case 'B': case 'C': case '2': a[i] = a[i] * 10L + 2L; break;
> case 'D': case 'E': case 'F': case '3': a[i] = a[i] * 10L + 3L; break;
> case 'G': case 'H': case 'I': case '4': a[i] = a[i] * 10L + 4L; break;
> case 'J': case 'K': case 'L': case '5': a[i] = a[i] * 10L + 5L; break;
> case 'M': case 'N': case 'O': case '6': a[i] = a[i] * 10L + 6L; break;
> case 'P': case 'R': case 'S': case '7': a[i] = a[i] * 10L + 7L; break;
> case 'T': case 'U': case 'V': case '8': a[i] = a[i] * 10L + 8L; break;
> case 'W': case 'X': case 'Y': case '9': a[i] = a[i] * 10L + 9L; break;
> case '1': a[i] = a[i] * 10L + 1L; break;
> case '0': a[i] *= 10L; break;
> default: j--;
> }
> }
> }
> quick_sort(a, 0, n - 1);
> c = 1;
> for (i = 0; i < n - 1; ) {
> for (j = i + 1; j < n && a[j] == a[i];j++) ;
> if (j > i + 1) {printf("%03ld-%04ld %d\n", a[i]/10000L,a[i]%10000L,j - i); c = 0;}
> i = j;
> }
> if (c) printf("No duplicates.\n");
> }
>
>
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator