pku3664 Election Time
2009-03-31 00:22
225 查看
// pku3664 Election Time #include <cstdio> #include <ctime> #include <cstdlib> #define MAX_NUM 50000 //#define MAX_NUM 10 typedef unsigned short UINT16; typedef long INT32; typedef unsigned long UINT32; UINT32 N, K; UINT32 A[MAX_NUM]; UINT32 B[MAX_NUM]; UINT16 seq[MAX_NUM]; inline void exchange(UINT32 i, UINT32 j) { if (i != j) { UINT16 tmp = seq[i]; seq[i] = seq[j]; seq[j] = tmp; } } UINT32 partition(UINT32 begin, UINT32 end) { if (begin >= end) return begin; UINT32 iPilot = begin + rand()%(end-begin+1); exchange(begin, iPilot); UINT32 i=begin+1, j=end; UINT32 pilot = A[seq[begin]]; while (i < j) { while (i<j && A[seq[i]] >= pilot) i++; while (i<j && A[seq[j]] <= pilot) j--; exchange(i, j); } UINT32 mid; if (pilot < A[seq[i]]) mid = i; else mid = i-1; exchange(begin, mid); return mid; } int main() { srand( (unsigned)time(NULL) ); scanf("%lu%lu", &N, &K); UINT16 n; for (n=0; n<N; n++) { seq = n; scanf("%lu%lu", &A , &B ); } if (1 == N) { printf("%lu/n", 1); return 0; } UINT32 begin = 0, end = N-1; UINT32 mid = partition(begin, end); while (mid != K) { if (mid < K) { begin = mid+1; mid = partition(begin, end); } else // (mid > K) { end = mid-1; mid = partition(begin, end); } } UINT32 maxIndex, maxVal=0; for (n=0; n<K; n++) { if (B[seq ] > maxVal) { maxIndex = seq ; maxVal = B[seq ]; } } printf("%lu/n", maxIndex+1); return 0; }
使用随机化pilot竟然完全没有效率提升
相关文章推荐
- pku3664 Election Time
- poj 3664 Election Time
- (Relax ST1.22)POJ 3664 Election Time(两次排序的巧妙应用)
- POJ 3664----Election Time
- POJ 3664 Election Time
- poj——3664——Election Time
- Pku3664
- Pku3664
- POJ 3664 Election Time 题解
- POJ_3664 Election Time
- POJ 3664 Election Time 题解
- POJ3664——Election Time
- poj 3664 Election Time
- POJ 3664 Election Time(简单的快速排序)
- poj 3664 Election Time
- POJ 3664 Election Time
- POJ 3664 Election Time 再想想
- pku--3751 时间格式转化
- PKU2505
- pku--3126 prime road(注意数据范围BFS)