码迷,mamicode.com
首页 > 编程语言 > 详细

uva 10026 Shoemaker's Problem(贪心+排序)

时间:2015-08-05 01:07:50      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:

虽然是个水题,但是在一些细节上wa了几次,好像不支持‘\b‘退格符号,我用在了输出空格那,结果wa了。。。白白

wa了几次。。。题意是看的题解。。今天只写了两道题,速度有点慢,得加快了,以后得先认真读懂题目,题目读懂了

就相当于做出来一半技术分享然后仔细动脑想想,有想法了再敲,不能盲目的做题。另外,热烈祝贺今天c++ primer看到

了100页技术分享

思路:

这道题是让给的数据是每件工作需要做的天数和每耽误一天所需要的费用,让求一个序列使得付费最小,如果有相同答

案把字典树最小的输出。。。输出的是序号,该件工作所排的序号。。。很明显就是贪心,单个工作所需费用排序,最

高的先做就可以了,注意是double型排序,判断是否等于零的时候不能直接用==,因为是二级排序,而且别忘了取绝

对值,这题没有取绝对值也过了。。。浮点数取绝对值是fabs。。。

贴代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
using namespace std;
struct node
{
	double d;
	int pos;
}c[1005];
int cmp(const void *a,const void *b)
{
	if(fabs(((node *)a)->d - ((node *)b)->d) < 1e-6)	
		return ((node *)a)->pos - ((node *)b)->pos;
	return ((node *)a)->d - ((node *)b)->d >0? -1:1;
}

int main()
{
	int T,i,n,a,b;
	cin >> T;
	while(T--)
	{
		cin >> n;
		for(i=1; i<=n; i++)
		{
			cin >> a >> b;
			c[i].d = b*1.0/a;
			c[i].pos = i;
		}
		qsort(c+1,n,sizeof(c[0]),cmp);
		for(i=1; i<=n; i++)
		{
			cout << c[i].pos;
			if(i!=n)
				cout << " ";
		}
			//cout << c[i].d << " " << c[i].pos << " ";
		cout << endl;
		if(T!=0)
			cout << endl;
	}
	return 0;
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

uva 10026 Shoemaker's Problem(贪心+排序)

标签:

原文地址:http://blog.csdn.net/sinat_22659021/article/details/47284667

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!