六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 33|回复: 0

【让我悲催的水题】HDU 1070 Milk

[复制链接]

升级  68.4%

272

主题

272

主题

272

主题

进士

Rank: 4

积分
842
 楼主| 发表于 2013-1-26 12:36:58 | 显示全部楼层 |阅读模式
http://acm.hdu.edu.cn/showproblem.php?pid=1070

题意:
①:milk最多只能喝5天
②:每天喝200ml
③:如果剩下的小于200ml,就要扔掉
④:所有milk都是今天生产的
⑤:当有多个milk一样便宜时,选择体积最大的
给出商标+1瓶的价格+体积,找出最便宜的那种milk

错了11次灰常悲催

网上很多童鞋都排序了,其实这题根本不用排序……

错误代码:
#include <iostream>#include <fstream>#include <algorithm>#include <string>#include <set>//#include <map>#include <queue>#include <utility>#include <iomanip>#include <stack>#include <list>#include <vector>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <ctime>#include <ctype.h>using namespace std;#define inf 0x3fffffffstruct milk{    char name[105];    int p, v;};int main(){    int t, n, i, days, x;    double mins, price;    milk m[105];    scanf ("%d", &t);    while (t--)    {        scanf ("%d", &n);        mins = inf;        for (i = 0; i < n; i++)        {            scanf ("%s%d%d", m.name, &m.p, &m.v);            if (m.v < 200)                continue;            if (m.v > 1000)                m.v = 1000;    //核心错误,擅自修改了体积,导致条件⑤不成立            days = m.v / 200;            price = 1.0 * m.p / days;            if (mins > price)                mins = price, x = i;            else if (mins == price && m.v > m[x].v)                x = i;        }        printf ("%s\n", m[x].name);    }    return 0;}

正确代码:
#include <iostream>#include <fstream>#include <algorithm>#include <string>#include <set>//#include <map>#include <queue>#include <utility>#include <iomanip>#include <stack>#include <list>#include <vector>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <ctime>#include <ctype.h>using namespace std;struct milk{    char name[105];    int p, v;};int main(){    int t, n, i, days, x;    double mins, price;    milk m[105];    scanf ("%d", &t);    while (t--)    {        scanf ("%d", &n);        mins = -1;        for (i = 0; i < n; i++)        {            scanf ("%s%d%d", m.name, &m.p, &m.v);            if (m.v < 200)    //忽略小于200lm的milk                continue;            if (m.v > 1000)                price = 1.0 * m.p / 5;    //错点,一开始没理解,考虑成6天……            else             {                days = m.v / 200;                price = 1.0 * m.p / days;            }            if (mins > price || mins < 0)   //x是暂时最便宜的标记                 mins = price, x = i;            else if (mins == price && m.v > m[x].v)    //条件⑤                x = i;        }        printf ("%s\n", m[x].name);    }    return 0;}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表