hdu1031 Design TShirt 解题报告 sort的使用

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 }
48 }
49 sort(a,a+m,cmp);
50 sort(a,a+k,cmp2);
51 for(i=0;i<k;i++)
52 {
53 if(i==0)
54 printf("%d",a[i].num);
55 else
56 printf(" %d",a[i].num);
57 }
58 printf("\n");
59 }
60
61 //system("pause");
62 return 0;
63 }
原文地址:https://www.cnblogs.com/yujiaao/p/2114873.html