当前位置: 代码迷 >> 综合 >> POJ3664 Election Time
  详细解决方案

POJ3664 Election Time

热度:11   发布时间:2024-01-16 14:06:34.0

水题,但我第一次写的代码WA了好几次,后来分析得:原来我用a[i]*1000+i来保留的做法进行快排时,a[i]相同时也会有大小之分,但题目数据检验时应该是按照普通快排排列的(随机),所以通过不了,后来改了一下结构体过了。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct fun{int x, y,num;};fun a[50005];int cmp1(const void*p1, const void*p2)
{struct fun*c = (fun*)p1;struct fun*d = (fun*)p2;return d->x - c->x;
}
int cmp2(const void*p1, const void*p2)
{struct fun*c = (fun*)p1;struct fun*d = (fun*)p2;return d->y - c->y;
}int main()
{int n, k,i;scanf("%d%d", &n, &k);for (i = 0; i < n; i++){ //注意这里要从0开始,如果从1开始,快排会出错(出现0)scanf("%d%d", &a[i].x, &a[i].y);a[i].num=i;}qsort(a, n, sizeof(fun), cmp1);qsort(a, k, sizeof(fun), cmp2);printf("%d\n", a[0].num+1);return 0;
}
  相关解决方案