现在的位置: 首页 > 综合 > 正文

PAT 1070. Mooncake

2018年01月14日 ⁄ 综合 ⁄ 共 835字 ⁄ 字号 评论关闭
之前一直在一组测试数据上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;
}

抱歉!评论已关闭.