AcWing1227.分巧克力——学习笔记

news2024/12/22 20:41:22

目录

题目

代码

AC结果

思路: 

一、设置全局变量

二、获取数据

三、当前大小可得到的巧克力数是否满足每个小朋友至少分到一块

四、二分法找每个小朋友可得到的最大大小


题目

1227. 分巧克力 - AcWing题库icon-default.png?t=MBR7https://www.acwing.com/problem/content/description/1229/


 

代码


import java.util.Scanner;

public class Main {
    public static int N;
    public static int K;
    static int[] h = new int[100010];
    static int[] w = new int[100010];
    public static void main(String[] args){
        //获取数据
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        N = n;
        K = input.nextInt();
        int max = Integer.MIN_VALUE;
        for(int i = 0; i < N; i++){
            h[i] = input.nextInt();
            w[i] = input.nextInt();
            //获取max
            if(h[i] > max){
                max = h[i];
            }
            if (w[i] > max){
                max = w[i];
            }
        }

        int l = 1;
        int r = max;
        while(l < r){
            int mid = l + r + 1 >> 1;
            if(check(mid)){
                l = mid;
            }else{
                r = mid -1;
            }
        }
        System.out.println(l);
    }

    public static boolean check(int size){
        int count = 0;
        for(int i = 0; i < N; i++){
            count += (h[i]/size)*(w[i]/size);
        }
        return count >= K;
    }
}

AC结果


思路: 

用两个Boolean类型的数组分别存储每个巧克力的长度和宽度,长度和宽度分别除以巧克力大小得到两数再相乘,即表示可以将当前巧克力块分为当前大小的巧克力块数。每个小朋友得到的巧克力大小至少是1×1,而分到的最大的巧克力边长不可能比原巧克力最长的边长还要长。因此,在1到最大边长max区域中,采用二分法,找到每个小朋友可获得最大的巧克力大小。

一、设置全局变量

    public static int N;
    public static int K;
    static int[] h = new int[100010];
    static int[] w = new int[100010];

N表示为巧克力数,K表示为小朋友数目,int类型的数组h和w分别用于储存巧克力的长和宽。因为后续需要在方法中调用,因此提前甚至为全局变量。

二、获取数据

        //获取数据
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        N = n;
        K = input.nextInt();
        int max = Integer.MIN_VALUE;
        for(int i = 0; i < N; i++){
            h[i] = input.nextInt();
            w[i] = input.nextInt();
            //获取max
            if(h[i] > max){
                max = h[i];
            }
            if (w[i] > max){
                max = w[i];
            }
        }

将每块巧克力的长和宽分别放到对应的int数组内,并记录下最长的边长max。并把获取到的巧克力数和人数赋值给对应的全局变量。

三、当前大小可得到的巧克力数是否满足每个小朋友至少分到一块

    public static boolean check(int size){
        int count = 0;
        for(int i = 0; i < N; i++){
            count += (h[i]/size)*(w[i]/size);
        }
        return count >= K;
    }

用count计数,然后遍历每一块大巧克力,判断其若按当前size分可得到多少块,再累加起来。与人数K进行比较,若大于等于则返回true,否则返回false。

四、二分法找每个小朋友可得到的最大大小

        int l = 1;
        int r = max;
        while(l < r){
            int mid = l + r + 1 >> 1;
            if(check(mid)){
                l = mid;
            }else{
                r = mid -1;
            }
        }
        System.out.println(l);

在[1,max]区间中利用二分法进行查找。mid利用右位移取中值,然后调用check方法判断,每个小朋友得到mid这个大小的巧克力是否够分。若够,则意味着可能巧克力分小了;若不够,则表示巧克力分大了。然后对对应的区间在进行二分即可,最后l就表示每个小朋友可以得到的巧克力的最大size。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/173779.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python---函数相关知识

专栏&#xff1a;python 个人主页&#xff1a;HaiFan. 专栏简介&#xff1a;本专栏主要更新一些python的基础知识&#xff0c;也会实现一些小游戏和通讯录&#xff0c;学时管理系统之类的&#xff0c;有兴趣的朋友可以关注一下。 函数前言函数的使用函数的语法格式函数的参数函…

Python脚本集成SQLite3数据库

文章目录一、Sqlite3数据库的基本使用1.数据库是什么2.数据库分类二、正式开始使用SQLite3&#xff08;Python&#xff09;1.基础sql命令2.Python连接SQLite3①查询②增加③更新一、Sqlite3数据库的基本使用 1.数据库是什么 借用百科上的话&#xff0c;数据库是“按照数据结构…

yolo v8 解决了 v5 的问题嘛?

文章大纲 yolo v8 简介网络结构yolo v8 准确率的提升yolo v8 的速度提升参考文献与学习路径yolo v8 简介 官网: https://ultralytics.com/yolov8https://github.com/triple-Mu/YOLOv8-TensorRT详细介绍: https://learnopencv.com/ultralytics-yolov8/网络结构 yolo v8 准确率…

I.MX6ULL裸机开发笔记3:SDK烧录镜像

目录 一、获取NXP官方SDK 二、Linux安装SDK 三、SDK中相关工具 四、烧录工具 一、获取NXP官方SDK 官方网站MCIMX6ULL-EVK_i.MX6ULL评估套件_NXP 半导体 二、Linux安装SDK ./XXX.run 这里如果提示sudo ./XXX.run 找不到命令&#xff0c;就可以用ls -l查看当前文件夹文件的…

VVDocumenter-Xcode github README.md 中英文翻译

最近在学习 Xcode 的使用&#xff0c;查到有一款用于生成注释文档的插件&#xff1a;VVDocumenter-Xcode 进入其 github 页面之后看 README&#xff0c;看到两句话&#xff1a; 1. Goodbye World&#xff1a; 再不更新了&#xff1f; 2. 从 Xcode 8 之后Apple官方提供了插件做…

Python爬虫---爬虫介绍,实战案例

目录标题1、爬虫介绍1.1 爬虫的合法性1.2 网络爬虫的尺寸1.3 robots.txt协议1.4 http&https协议1.5 requests模块1.5.1 request库的异常2、实战案例2.1 百度页面2.2 爬取京东商品页面2.3 爬取亚马逊商品页面-更改headers2.4 百度/360搜索关键词提交-params2.5 网络图片的爬…

Nacos 报Statement cancelled due to timeout or client request

1. 问题&#xff1a;nacos 启动报错&#xff0c;启动失败&#xff0c;全部报错下面贴出。 2. 结论&#xff1a;排查结果为服务器带宽不够&#xff0c;mysql 查询的数量量太大&#xff0c;传输时间损坏在网络io上&#xff01; 3. 下面开始回溯事故起因&#xff1a; 前期config…

2022年一年级入学小结

2022年即将过去&#xff0c;在这里&#xff0c;简单回顾一下Richard同学进入小学一学期后的成长经历和小结。先说说学校生活Richard很喜欢目前的学校&#xff0c;喜爱给他授课的每一位老师&#xff0c;也和老师和同学们相处得不错&#xff0c;自诩自己现在的”粉丝“蛮多。从我…

C++设计模式(6)——适配器模式

亦称&#xff1a; 封装器模式、Wrapper、Adapter 意图 适配器模式是一种结构型设计模式&#xff0c; 它能使接口不兼容的对象能够相互合作。 问题 假如你正在开发一款股票市场监测程序&#xff0c; 它会从不同来源下载 XML 格式的股票数据&#xff0c; 然后向用户呈现出美…

9.框架SpringMVC

一、基本概念 Spring MVC 是 Spring 提供的一个基于 MVC 设计模式的轻量级 Web 开发框架&#xff0c;本质上相当于 Servlet。Spring MVC 使用 MVC 架构模式的思想&#xff0c;将 Web 应用进行职责解构&#xff0c;把一个复杂的 Web 应用划分成模型&#xff08;Model&#xff09…

HashMap的使用:put、remove和get方法原理

关联项目需求进行FeatureAB上报的时候&#xff0c;我们使用HashSet的add方法存key值&#xff0c;如果key已存在&#xff0c;则add失败&#xff0c;返回false&#xff0c;如果key不存在&#xff0c;add成功&#xff0c;返回true。看源码中HashSet的add(E e)方法实现&#xff1a;…

【Git】IDEA 集成 GitHub

8、IDEA 集成 GitHub 8.1、设置 GitHub 账号 如果出现 401 等情况连接不上的&#xff0c;是因为网络原因&#xff0c;可以使用以下方式连接&#xff1a; 然后去 GitHub 账户上设置 token。 点击生成 token。 复制红框中的字符串到 idea 中。 点击登录。 8.2、分享工程到 GitHu…

【甄选靶场】Vulnhub百个项目渗透——项目五十五:SP-LEOPOLD v1.2(beef联动msf,脏牛提权)

Vulnhub百个项目渗透 Vulnhub百个项目渗透——项目五十五&#xff1a;SP-LEOPOLD v1.2&#xff08;beef联动msf&#xff0c;脏牛提权&#xff09; &#x1f525;系列专栏&#xff1a;Vulnhub百个项目渗透 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&am…

ZooKeeper-集群搭建

5)ZooKeeper 集群搭建 5.1)Zookeeper集群介绍 Leader选举&#xff1a; •Serverid&#xff1a;服务器ID 比如有三台服务器&#xff0c;编号分别是1,2,3。 编号越大在选择算法中的权重越大。 •Zxid&#xff1a;数据ID 服务器中存放的最大数据ID.值越大说明数据 越新&…

剑指offer—day1.用两个栈实现队列、包含min函数的栈

1.用两个栈实现队列 本题来源&#xff1a;力扣 剑指 Offer 09. 用两个栈实现队列 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/题目描述 用两个栈实现一个队列。队列的声明如下&#xff0c;请实现它的两…

IP-guard如何映射到外网登录访问管理

终端安全管理(endpoint security management)是一种保护网络安全的策略式方法&#xff0c;它需要终端设备在得到访问网络资源的许可之前遵从特定的标准。随着企业信息化发展&#xff0c;终端安全管理系统需求不断扩大&#xff0c;相关系统软件被广泛应用。 IPguard即IP-guard&a…

线段树(重要!多加理解懒惰标记!)

基础概念&#xff1a; 线段&#xff08;区间&#xff09;[L,R] 所对应的线段树是由区间 [L,R] 及其子区间构成的二叉树&#xff08;如下图所示&#xff09; 线段树具有的特性&#xff1a; &#xff08;1&#xff09;线段树的叶结点为只有一个元素的区间&#xff0c;因此长度为…

最新版海豚调度dolphinscheduler-3.1.3安装部署详细教程

0 背景 本文基于Ambari集群搭建最新版本的海豚调度dolphinscheduler-3.1.3版本&#xff0c;后续会尝试整合到Ambari中。 1 安装准备 安装dolphinscheduler需要在环境中安装如下依赖 ① JDK8 下载JDK (1.8)&#xff0c;安装并配置 JAVA_HOME 环境变量&#xff0c;并将其下的 …

用 22 张照片打开 23 年

魔幻又带有现实主义色彩的三年似乎终将见底。这也为 2023 年赋予了一些新的意义&#xff0c;或许是充满生机、怀揣希望、满怀爱意&#xff0c;或许是重新启航、步履不停、勇敢探索……为此&#xff0c;我们收集了 22 位社区用户和公司小伙伴在过去一年的「特别 Moment」及新年愿…

你认为DAO是否可行?新年计划,卯足干劲,兔必No.1

文章目录&#x1f31f; 课前小差&#x1f31f; 聚沙成塔&#x1f31f; 社会价值&#x1f31f; DAO是什么&#x1f31f; 国产化&#x1f31f; 商业化回报&#x1f31f; 写在最后&#x1f31f; 课前小差 哈喽&#xff0c;大家好&#xff0c;我是几何心凉&#xff0c;这是一份全新…