HDU 1031

水题,结构题二级排序,在对编号进行逆序排序


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct {
    float sa;
    int nu;
}Node;
Node logo[105];
int temp[105];

int comp1(const void *a,const void *b)
{
    Node *p1,*p2;
    p1 = (Node *)a;
    p2 = (Node *)b;
    if(p1->sa!=p2->sa)
        return p2->sa-p1->sa;
    return p1->nu-p2->nu;
}

int comp2(const void *a,const void *b)
{
    return *(int*)b-*(int *)a;
}
void init(int n)
{
    int i;
    for(i = 0; i < n; i ++)
    {
        logo[i].sa = 0.;
        logo[i].nu = i+1;
    }
}

int main()
{
    int i,j,n,m,k;
    float a;
    while(~scanf("%d%d%d",&n,&m,&k))
    {
        memset(temp,0,sizeof(temp[0]));
        init(m);
        for(i = 0;i < n; i ++)
        {
            for(j = 0; j < m; j ++)
            {
                scanf("%f",&a);
                logo[j].sa += a;
            }
        }
       qsort(logo,m,sizeof(logo[0]),comp1);
       for(i = 0;i < k; i ++)
        temp[i] = logo[i].nu;
       qsort(temp,k,sizeof(temp[0]),comp2);
       for(i = 0;i < k-1; i ++)
        printf("%d ",temp[i]);
       printf("%d\n",temp[i]);
    }
    return 0;
}


posted on 2014-04-30 18:34  wangzhili  阅读(89)  评论(0编辑  收藏  举报