http://acm.hdu.edu.cn/showproblem.php?pid=1031
考察sort的用法 将 k排 每排m个数 上下加和 得到一排 m个数 然后按照得分从大到小的顺序排序 得分相同 将原来编号小的放在前面 取得前k个再次按照编号由小到大进行排序
输出排序后的结果 使用结构体保存排序之前的编号 在自己定义只对于数据的排序函数用于sort
最开始没理解题意 以为就是取第一次排好序的前几个没进行第二次排序 并且对于得分相同没做处理直接忽略 测试数据一值不过
代码如下:
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 using namespace std; 5 struct case1 //用num保存排序之前的编号 6 { 7 int num; 8 float data; 9 }; 10 case1 a[1000]; 11 int cmp(const case1 &a,const case1 &b) //定义cmp函数用于sort的参数 12 { 13 if(a.data==b.data) 14 return a.num<b.num; 15 return a.data>b.data; 16 17 } 18 int cmp2(const case1 &a,const case1 &b) 19 { 20 return a.num>b.num; 21 } 22 void init(case1 a[],int n) 23 { 24 int i; 25 memset(a,0,sizeof(a)); 26 for(i=0;i<n;i++) 27 { 28 a[i].num=i+1; 29 } 30 } 31 int main() 32 { 33 // freopen("test.txt","r",stdin); 34 // freopen("print.txt","w",stdout); 35 int n,m,k,i,j,k1; 36 float temp; 37 while(scanf("%d %d %d",&n,&m,&k)!=EOF) 38 { 39 memset(a,0,sizeof(a)); 40 init(a,1000); 41 for(i=0;i<n;i++) 42 { 43 for(j=0;j<m;j++) 44 { 45 scanf("%f",&temp); 46 a[j].data+=temp; 47