之前一直在一组测试数据上WA,之后将amount从 int 改成 double 就AC了,可能是除法时的精度问题吧。
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
//PAT 1070
int N;
int D;
double ans;
class cake
{
public:
double amount;
double prices;
double value;
public:
cake()
{
amount=0;
prices=0;
value=0;
}
cake( double a,double p,double v)
{
amount=a;
prices=p;
value=v;
}
bool operator < (const cake& nd) const
{
return value> nd.value;
}
};
bool cmp(cake c1,cake c2)
{
return c1.value>c2.value;
}
cake a[1010];
void input()
{
scanf("%d %d",&N,&D);
for(int i=0;i<N;i++)
{
scanf("%lf",&a[i].amount);
}
for(int i=0;i<N;i++)
{
scanf("%lf",&a[i].prices);
a[i].value=a[i].prices/a[i].amount;
}
}
int main()
{
//freopen("input.txt","r",stdin);
input();
sort(a,a+N);
for(int i=0;i<N;i++)
{
if(D>=a[i].amount)
{
ans+=a[i].prices;
D-=a[i].amount;
}
else
{
ans+=a[i].value*D;
break;
}
}
printf("%.2lf\n",ans);
return 0;
}