之前一直在一组测试数据上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; }