您的位置:首页 > 其它

hdu1031 Design T-Shirt 解题报告 sort的使用

2011-07-23 15:13 281 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1031

考察sort的用法 将 k排 每排m个数 上下加和 得到一排 m个数 然后按照得分从大到小的顺序排序 得分相同 将原来编号小的放在前面 取得前k个再次按照编号由小到大进行排序

输出排序后的结果 使用结构体保存排序之前的编号 在自己定义只对于数据的排序函数用于sort

最开始没理解题意 以为就是取第一次排好序的前几个没进行第二次排序 并且对于得分相同没做处理直接忽略 测试数据一值不过

代码如下:

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct case1 //用num保存排序之前的编号
{
int num;
float data;
};
case1 a[1000];
int cmp(const case1 &a,const case1 &b)  //定义cmp函数用于sort的参数
{
if(a.data==b.data)
return a.num<b.num;
return a.data>b.data;

}
int cmp2(const case1 &a,const case1 &b)
{
return a.num>b.num;
}
void init(case1 a[],int n)
{
int i;
memset(a,0,sizeof(a));
for(i=0;i<n;i++)
{
a[i].num=i+1;
}
}
int main()
{
//  freopen("test.txt","r",stdin);
//  freopen("print.txt","w",stdout);
int n,m,k,i,j,k1;
float temp;
while(scanf("%d %d %d",&n,&m,&k)!=EOF)
{
memset(a,0,sizeof(a));
init(a,1000);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%f",&temp);
a[j].data+=temp;
}
}
sort(a,a+m,cmp);
sort(a,a+k,cmp2);
for(i=0;i<k;i++)
{
if(i==0)
printf("%d",a[i].num);
else
printf(" %d",a[i].num);
}
printf("\n");
}

//system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: