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

本文分享了作者在解决编程难题时遇到的问题及经验总结,包括如何避免使用不支持的符号、优化代码逻辑、理解题意的重要性,以及如何通过贪心算法解决特定问题。此外,还提到了在编程过程中保持专注、认真阅读题目和提高代码阅读速度的重要性。通过实例分析,文章强调了理解题意、合理排序和避免直接比较浮点数等细节对于高效解决问题的作用。

虽然是个水题,但是在一些细节上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;
}



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值