读题的时候注意题目如何描述数据类型。
这题之前做过,我觉得有可能犯得错误是以d=0为终点,其实d有可能有剩余。
#include<bits/stdc++.h>
using namespace std;
struct moon{
double stock;
double sale;
double price;
}bing[1010];
bool cmp(moon a,moon b){
return a.price>b.price;
}
int main(){
int n;
double d;
cin>>n>>d;
for(int i=0;i<n;i++) cin>>bing[i].stock;
for(int i=0;i<n;i++) cin>>bing[i].sale;
for(int i=0;i<n;i++) bing[i].price=bing[i].sale/bing[i].stock;
sort(bing,bing+n,cmp);
double ans=0.0;
//情况1:d还有剩余
for(int i=0;i<n;i++){
if(d>=bing[i].stock){
d-=bing[i].stock;ans+=bing[i].sale;
}else{
ans+=bing[i].price*d;
d=0;
}
if(d==0) break;
}
printf("%.2f",ans);
return 0;
}