1. 程式人生 > 實用技巧 >PAT (Basic Level) Practice1020 -月餅 (25分)

PAT (Basic Level) Practice1020 -月餅 (25分)

題目連結:https://pintia.cn/problem-sets/994805260223102976/problems/994805301562163200

題意:給定n組月餅的庫存量和總價,以及要採購的月餅數量,求採購需要的最少money

思路:簡單貪心,按照單價降序排序後切割選取

坑點:題目中僅說明 庫存量和總售價 是正數 並未說明是正整數 ,當作正整數會有個測試點過不去

反思對於計算或者涉及到小數的題目最好都定義為double來使用

#include<cstdio>
#include<algorithm>
using namespace std;
struct node{
    double  num,p;
}a[1005];
bool cmp(struct node s,struct node t){
    return s.p*t.num>s.num*t.p;
}
int main (){
    int n;
    double m;
    scanf("%d%lf",&n,&m);
    for(int i=0;i<n;i++){
        scanf("%lf",&a[i].num);
    }
    for(int i=0;i<n;i++){
        scanf("%lf",&a[i].p);
    }
    sort(a,a+n,cmp);
    double ans=0;
    for(int i=0;i<n;i++){
        if(a[i].num<m){
            m-=a[i].num;
            ans+=a[i].p;
        }
        else{
            ans+=1.0*m*a[i].p/a[i].num;
            break;
        }
    }
    printf("%.2f",ans);
    return 0;
}