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