hdu1070 | LSABLOG

首页 » Program » C/C++ » 正文

hdu1070

http://acm.hdu.edu.cn/showproblem.php?pid=1070

这题我用结构体,用cpe来存最便宜那个牛奶的数值(越小越便宜),再对结构体数组进行快排,可以ac。但是感觉有问题,当不同种类牛奶价格一样时,它们的容量都大于1000时,容量都会被赋值1000,那么这样如何再按相同便宜价格按容量大的输出呢?没搞懂,后面有我测的数据。

#include <stdio.h>
#include <stdlib.h>

struct milk
{
    char milkname[105];
    __int64 price;
    __int64 ml;
    double cpe;
} mkind[105];

int cmps(const void*a,const void*b)
{
    struct milk *x = (milk *)a;
    struct milk *y = (milk *)b;
    if (x->cpe!=y->cpe) return x->cpe - y->cpe;
    else return y->ml - x->ml;
}

int main()
{
    int t,i,n;
    scanf("%d",&t);
    while (t--)
        {
            scanf("%d",&n);
            for (i=0; i<n; i++)
                {
                    scanf("%s%I64d%I64d",mkind[i].milkname,&mkind[i].price,&mkind[i].ml);
                    // getchar();
                    if (mkind[i].ml<200) mkind[i].cpe = 0x7f7f7f7f;
                    else
                        {
                            if (mkind[i].ml>1000) mkind[i].ml = 1000;
                            mkind[i].cpe = ((mkind[i].price * 1.0) / (mkind[i].ml / 200));
                        }
                }
            qsort(mkind,n,sizeof(mkind[0]),cmps);
            printf("%s\n",mkind[0].milkname);
        }
    return 0;
}

这里我实验了3组数据,第一组应该输出uu吧,因为它容量最大
第二组没问题,第三组应该输出uio吧,不知道是我没理解题意还是杭电数据问题,不过可以ac………真奇怪。

赞 (0)

Comment