Milk
题意分析
每组测试数据给出一系列牛奶商品,分别是牛奶的品牌,价格,以及体积。在读取数据的时候,体积在200以下的牛奶直接忽略掉。并且每天要喝200ML的牛奶。但是无论牛奶体积有多么大,牛奶最多喝5天,也就是说每盒牛奶最多喝1000ml,当牛奶的体积不为200整数倍的时候,多余的直接扔掉不喝。现在编写程序挑选出最便宜的牛奶。
贪心策略。
最便宜的就是价钱最低,当然要计算平均某量所花的钱。这个量是平均每体积还是平均每天呢?当然是平均每天。因为如果体积大于1000ml多余的部分是不喝的,尽管单位体积再便宜,实际喝掉的也就是1000ml。当然可以理解为平均有效体积所花的钱。最简单的方法就是每盒牛奶所花的钱/这盒牛奶所能喝的天数,按照升序排列后,输出第一项即可。注意排序时,若价钱相等,则体积大的在前面。
代码总览
/*
Title:HDOJ.1070
Author:pengwill
Date:2016-11-24
*/
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define max 110
using namespace std;
struct milk{
char name[max];
//int price;
int v;
int day;
double rate;
}item[max];
bool cmp(milk a, milk b)
{
if(a.rate < b.rate){
return true;
}else if(a.rate == b.rate){
if(a.v>b.v){
return true;
}else{
return false;
}
}else{
return false;
}
}
int main()
{
//freopen("in.txt","r",stdin);
char tname[max];
int tprice;
int tv;
int t,n;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
int i;
for(i = 0;i<n;i++){
scanf("%s %d %d",tname,&tprice,&tv);
//item[i].price = tprice;
if(tv<200){
n--;
i--;
continue;
}else if(tv>=1000){
strcpy(item[i].name,tname);
item[i].v = tv;
item[i].day = 5;
item[i].rate = 1.0 * tprice / 5;
// break;
}else {
strcpy(item[i].name,tname);
item[i].v = tv;
item[i].day = tv / 200;
item[i].rate = 1.0 * tprice / item[i].day;
// break;
}
//}
}
sort(item,item+n,cmp);
printf("%s\n",item[0].name);
}
return 0;
}