HDU 1070 Milk(水~)

Description
土豪要买牛奶,对牛奶的要求是生产日期5天内饮用,每天喝200ml,少于200ml或者过期的扔掉,商场牛奶均是当天生产,选取满足要求的单价最小的牛奶,当单价一样时选择容量多的
Input
第一行为用例组数T,每组用例第一行输入牛奶种数n,之后n行每行为一种牛奶的描述,包括牛奶的名称,价格和价钱
Output
对于每组用例,输出土豪要买哪种牛奶
Sample Input
2
2
Yili 10 500
Mengniu 20 1000
4
Yili 10 500
Mengniu 20 1000
Guangming 1 199
Yanpai 40 10000
Sample Output
Mengniu
Mengniu
Solution
对于低于200ml的牛奶,将其单位价钱定成INF,对于超过1000ml的牛奶,将其单位价钱定成其价钱/5,对于低于1000ml的牛奶,将其单位价钱定成其价钱/(容量/200)),然后对每种牛奶先按价钱降序排序,价钱相同则按容积升序排序之后输出第一项即可
Code

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define INF 111111111
struct node
{
    char s[111];
    double pr;
    int v;
}m[111];
int cmp(node a,node b)
{
    if(a.pr!=b.pr)//价钱不同则将价钱降序排 
        return a.pr<b.pr;
    return a.v>b.v;//价钱相同则按容量降序排 
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        for(int i=0;i<n;i++)
        {
            int temp,pri;
            scanf("%s%d%d",m[i].s,&pri,&temp);
            m[i].v=temp;
            if(temp<200)//容量小于200价钱定成INF 
                m[i].pr=INF;
            else if(temp>1000)//容量超过1000也只能喝5天 
                m[i].pr=pri*1.0/5;
            else//容量低于1000则可以喝temp/200天 
                m[i].pr=pri*1.0/(temp/200);
        }
        sort(m,m+n,cmp);//对牛奶排序 
        puts(m[0].s);
    }
    return 0;
}

你可能感兴趣的:(HDU 1070 Milk(水~))