月饼库存量和总售价可以是浮点数(题目中只说是正数,没说是正整数),所以都要用double类型储存。
#include <cstdio>
#include <cstring>
#include <math.h>
#include <algorithm>
#include <iostream>
const float esp=1e-8;
using namespace std;
struct yuebingzhonglei{
double shuliang; //本来是int 改成 double以后就通过了最后一个测试点。
double zongshoujia;
double psj;
}yuebing[1001];
bool cmp(yuebingzhonglei a,yuebingzhonglei b){
return a.psj>b.psj+esp;
}
int main(){
int N=0,i=0;
double D=0,sumt=0;
double summoney=0;
cin >> N>> D;
for(i=0;i<N;i++){
cin>>yuebing[i].shuliang;
}
for(i=0;i<N;i++){
cin>>yuebing[i].zongshoujia;
}
for(i=0;i<N;i++){
yuebing[i].psj=yuebing[i].zongshoujia/yuebing[i].shuliang;
}
sort(yuebing,yuebing+N,cmp);
for(i=0;sumt<=D&&i<N;i++){
if(D-sumt>=yuebing[i].shuliang){
sumt+=yuebing[i].shuliang;
summoney+=yuebing[i].zongshoujia;
}else{
summoney+=(D-sumt)*yuebing[i].psj;
sumt=D;
}
}
printf("%0.2lf",summoney);
return 0;
}
转载须注明出处。