此題理解起来简单,但是还是有些细节需要注意,
这里纪念一下。
首先定义性价比: 两种方式:每天开销最小,即每天平均下来花的钱最少。
另一种:每元钱买的天数最大。
另一个注意点就是要读题,性价比一样时选择容量大的
这两种方式不容易出错。
如果定义性价比为,每元买到的牛奶最多,应注意有个陷阱,就是每元能喝到的牛奶最多才正确,比如500ml,其中100ml是无效的,需要去除,否则,算出的每元买到的牛奶最多是不正确的。
#include <iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<cmath>
using namespace std;
#define MAX 105
#define eps 10e-8
char name[MAX][200];
int t;
int n;
int main()
{
cin>>t;
while(t--){
// memset(milk,0,sizeof(milk));
memset(name,0,sizeof(name));
scanf("%d",&n);
int index=-1;
int p,v;
double per;
double mmp=0;
int mxv;
for(int i=0;i<n;i++){
scanf("%s",name[i]);
cin>>p>>v;
if(v<200) continue;
// calculate per yuan can buy how much day
if(v>1000){
per=1000/200*1.0/p;
}else{
per=v/200*1.0/p;
}
if(per>mmp){
mmp=per;
index=i;
mxv=v;
}else if(fabs(per-mmp)<eps){
if(v>mxv){
index=i;
mxv=v;
}
}
}
printf("%s\n",name[index]);
}
return 0;
}