Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux编程 > » 正文

hdu1031 Design T-Shirt 解题报告 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 
                
               



               

            

Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史