文章

34

粉丝

0

获赞

360

访问

9.2k

头像
喝饮料 题解:
P1478 云南大学机试题
发布于2026年3月10日 23:53
阅读数 127

#include <bits/stdc++.h>
using namespace std;

struct drink {
    double mi;
    double wi;
};

bool cmp(drink a, drink b) {
    if (a.wi == 0 && b.wi == 0) return a.mi > b.mi;
    if (a.wi == 0) return true;
    if (b.wi == 0) return false;
    return (a.mi / a.wi) > (b.mi / b.wi);
}

int main() {
    int x, n;
    while (scanf("%d %d", &x, &n) != EOF) {
        drink dr[1000];
        if (x == -1 && n == -1) break;
        
        for (int i = 0; i < n; i++) {
            scanf("%lf %lf", &dr[i].mi, &dr[i].wi);
        }
        
        stable_sort(dr, dr + n, cmp);
        
        double ans = 0;
        for (int j = 0; j < n; j++) {
            if (x >= dr[j].wi) {
                ans += dr[j].mi;
                x -= dr[j].wi;
            } else {
                ans += x * (dr[j].mi / dr[j].wi);  // 修复:累加而不是赋值
                break;
            }
        }
        printf("%.3lf\n", a...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发