当前位置: 首页 > news >正文

天梯赛L2-003 月饼满分(笔记)

一、代码

月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。

注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有 3 种月饼,其库存量分别为 18、15、10 万吨,总售价分别为 75、72、45 亿元。如果市场的最大需求量只有 20 万吨,那么我们最大收益策略应该是卖出全部 15 万吨第 2 种月饼、以及 5 万吨第 3 种月饼,获得 72 + 45/2 = 94.5(亿元)。

输入格式:

每个输入包含一个测试用例。每个测试用例先给出一个不超过 1000 的正整数 N 表示月饼的种类数、以及不超过 500(以万吨为单位)的正整数 D 表示市场最大需求量。随后一行给出 N 个正数表示每种月饼的库存量(以万吨为单位);最后一行给出 N 个正数表示每种月饼的总售价(以亿元为单位)。数字间以空格分隔。

输出格式:

对每组测试用例,在一行中输出最大收益,以亿元为单位并精确到小数点后 2 位。

输入样例:

3 20
18 15 10
75 72 45

输出样例:

94.50

 二、思路

利用Collections对单价进行自定义排序,节点类需要继承Comparable

三、实现代码


import java.util.*;
import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException{
        //Scanner sc=new Scanner(System.in);
        Read sc=new Read();
        int n=sc.nextInt();
        int d=sc.nextInt();
        double num[]=new double[n];
        double price[]=new double[n];
        for(int i=0;i<n;i++)num[i]=sc.nextDouble();
        for(int i=0;i<n;i++)price[i]=sc.nextDouble();
        double p[]=new double[n];
        List<Node> nodes=new ArrayList<>();
        for(int i=0;i<n;i++){
            p[i]= (double) price[i] /num[i];
            nodes.add(new Node(num[i],price[i],p[i]));
        }
        Collections.sort(nodes);
        double ans=0;
        for(int i=0;i<nodes.size();i++){
            if(d>=nodes.get(i).num){
                ans+=nodes.get(i).price;
                d-=nodes.get(i).num;
            }else{
                ans+=(double) nodes.get(i).price/((double) nodes.get(i).num /(double) d);
                break;
            }
        }
        System.out.printf("%.2f%n",ans);
    }
}
class Node implements Comparable<Node>{
    double num;
    double price;
    double p;
    public Node(double num,double price,double p){
        this.num=num;
        this.price=price;
        this.p=p;
    }

    @Override
    public int compareTo(Node o) {
        return Double.compare(o.p,this.p);
    }
}

class Read {
    BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
    StreamTokenizer st = new StreamTokenizer(bfr);

    public int nextInt() throws IOException {
        st.nextToken();
        return (int) st.nval;
    }
    public Double nextDouble() throws IOException {
        st.nextToken();
        return (Double) st.nval;
    }
    public String nextLine() throws IOException {
        return bfr.readLine();
    }
}


相关文章:

  • 基于mediapipe深度学习的运动人体姿态提取系统python源码
  • 汇川EASY系列之以太网通讯(MODBUS_TCP做从站)
  • RocketMQ分布式场景篇
  • C语言自定义类型【结构体】详解,【结构体内存怎么计算】 详解 【热门考点】:结构体内存对齐
  • tauri2项目在本地启动一个服务器,并支持控制停止还是启动
  • FPGA-DE2115开发板实现流水灯
  • 更改 docker0 IP
  • 第五章-PHP函数
  • 批处理脚本编译vs工程
  • LoRA中黑塞矩阵、Fisher信息矩阵是什么
  • C++中new和delete如何构建简单对象和复杂对象?
  • c++介绍进程间的通信一
  • K8s认证(CKA/CKAD/CKS)哪家强?主流证书对比
  • 《Linux 网络架构:基于 TCP 协议的多人聊天系统搭建详解》
  • Zookeeper 集群部署与管理实践
  • 第4章:Docker安装与环境配置:多平台部署指南
  • 流程图软件推荐,好用的流程图工具分享
  • 解决Qt信号在构造函数中失效的问题
  • DataWhale大语言模型-大模型技术基础
  • Git Worktree 实现 “一边修生产Bug,一边写新需求”
  • 打破“内卷”与“焦虑”怪圈,在阅读中寻找松弛感
  • 孙燕姿演唱会本周末开唱,小票根如何在上海释放大活力
  • 5月1日起,涉外婚姻登记将在上海市16区全面铺开
  • 波音CEO称中方因中美“贸易战”停止接收波音飞机,外交部回应
  • 我国民营经济首季运行向新向好,对国民经济发展形成有力支撑
  • 长三角与粤港澳大湾区融合发展,无锡何以成为窗口?