⬆︎
×

[PAT-A] 1070 Mooncake

Java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    private static class Mooncake implements Comparable<Mooncake> {
        double num;
        double price;
        double unitPrice;

        public Mooncake(double num, double price, double unitPrice) {
            this.num = num;
            this.price = price;
            this.unitPrice = unitPrice;
        }

        @Override
        public int compareTo(Mooncake o) {
            return o.unitPrice > this.unitPrice ? 1 : -1;
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] s = br.readLine().split(" ");
        int n = Integer.parseInt(s[0]);
        double demandNum = Double.parseDouble(s[1]);

        ArrayList<Mooncake> list = new ArrayList<>();
        String[] s1 = br.readLine().split(" "), s2 = br.readLine().split(" ");
        for (int i = 0; i < n; i++) {
            double num = Double.parseDouble(s1[i]);
            double price = Double.parseDouble(s2[i]);
            double value = price / num;
            Mooncake mooncake = new Mooncake(num, price, value);
            list.add(mooncake);
        }

        Collections.sort(list);
        double res = 0;
        for (int i = 0; i < n; i++) {
            if (demandNum >= list.get(i).num) {
                res += list.get(i).price;
                demandNum -= list.get(i).num;
            } else {
                res += list.get(i).unitPrice * demandNum;
                break;
            }
        }
        System.out.printf("%.2f", res);
    }
}

C++

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 1010;

double n, m;

struct Cake {
    double p, w;

    bool operator<(const Cake &t) const {
        return p / w > t.p / t.w;
    }
} c[N];

int main() {
    cin >> n >> m;
    for (int i = 0; i < n; ++i) cin >> c[i].w;
    for (int i = 0; i < n; ++i) cin >> c[i].p;

    sort(c, c + (int) n);

    double res = 0;
    for (int i = 0; i < n && m > 0; ++i) {
        double r = min(m, c[i].w);
        m -= r;
        res += c[i].p / c[i].w * r;
    }

    printf("%.2lf\n", res);

    return 0;
}

发表评论