题目大意:在T-shirt设计图标,n个人为m种标志打分,输出前k个得分最高的标志编号。
对于第一个输出样例,得分最高的标志分别为6,3,1,5.在按编号大小降序排列。
对于第二个输出样例,3个标志得分一样,编号小的排前面,则为1,2,3.输出前2个按降序则是2,1.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
double sum;
int num;
}node;
node f[10000];
int cmp1(const void*a,const void*b)
{
return (*(node*)a).sum-(*(node*)b).sum>0?-1:1;
}
int cmp2(const void*a,const void*b)
{
return (*(node*)a).num-(*(node*)b).num>0?-1:1;
}
int main()
{
int n,m,k;
int i,j;
double temp;
while(scanf("%d %d %d",&n,&m,&k)!=EOF)
{
memset(f,0,sizeof(f));
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%lf",&temp);
f[j].sum+=temp;
f[j].num=j+1;
}
}
qsort(f,m,sizeof(f[0]),cmp1);
qsort(f,k,sizeof(f[0]),cmp2);
if(k==1)
printf("%d\n",f[0].num);
else
{
printf("%d",f[0].num);
for(i=1;i<k;i++)
{
printf(" %d",f[i].num);
}
printf("\n");
}
}
return 0;
}