您的位置:首页 > 其它

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

2015-08-04 23:12 323 查看
虽然是个水题,但是在一些细节上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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: