【备战秋招】每日一题:4月15日美团春招第二题:题面+题目思路 + C++/python/js/Go/java带注释

news2024/11/17 13:22:55

为了更好的阅读体检,为了更好的阅读体检,,可以查看我的算法学习博客第二题-分糖果

在线评测链接:P1236

题目内容

某天,塔子哥去商店买了两种不同口味的糖果,分别买了 a 个和 b 个。当他回到家时,他发现他需要将这些糖果分配给班上的 n 个小朋友,以确保每块糖果都得恰好分到一个小朋友,而且不能有任何浪费。

塔子哥知道,如果两种糖果混在一起吃,那么它们的味道就不是很好,因此每个小朋友只能得到其中一种糖果。此外,塔子哥希望尽可能让每个小朋友都能够得到尽可能多的糖果,而且他希望分得最少糖果的小朋友也能得到尽可能多的糖果。

为了实现这个目标,塔子哥决定请你来帮他编写一段程序来帮助他计算出最少糖果的小朋友最多能获得多少糖果,你能帮帮他吗?

输入描述

第一行一个正整数 T ,表示有 T 组数据。

对于每一组数据,输入一行 n , a , b ,中间用空格隔开。

1\le a,b\le 100002\le n\le a+b1\le T\le 100

输出描述

对于每一组数据,输出仅一行一个整数,表示答案。

样例

输入

2
5 2 3
4 7 10

输出

1
3

样例解释

第一组数据,每个小朋友都恰好分得一个糖果

第二组数据,可以分成: (3个第一种,4个第一种,5个第二种,5个第二种),这样第一个小朋友分得最少,没有其他方案使得分得最少的那个小朋友的糖果数量更大。

思路

二分答案

常识

一般最小化最大,最大化最小的问题,都是二分答案来解决。

正确性

分给一个孩子的糖果越多,则分到糖果的孩子就越少。 分给一个孩子的糖果越少,则分到糖果的孩子就越多。

故答案具有二段性,可以二分。

做法

二分最终拿到的糖果的最少个数(即答案)为 mid,然后 check 函数是考虑对于每个孩子分到 mid 个糖果,最多可以分给多少个孩子,设为x=a / mid + b / mid。 那么只要x \geq n ,mid就可行。

时间复杂度:x的求解可以O(1)直接计算 , 那么复杂度即 O(\log (\max(a,b)))

类似题目推荐

这是一道比较简单的二分答案题。这里给大家推荐一些二分答案的题目

LeetCode

1.LeetCode 875. 爱吃香蕉的珂珂

2.LeetCode 2187. 完成旅途的最少时间

3.LeetCode 6325. 修车的最少时间

4.LeetCode 2226. 每个小孩最多能分到多少糖果

Codefun2000

  1. P1189. 华为实习 2023.04.12-实习笔试-第一题-购物系统的降级策略

  2. P1106. 腾讯音乐 2023.3.23-第二题-划分字符串

  3. P1006. 华为秋招 2022.9.21-数组取min

  4. P1093. 米哈游 2023.03.19-第三题-塔子哥的无限字符串 - 难度较大

代码

CPP

#include <bits/stdc++.h> // 引入标准库头文件
using namespace std;
​
int main() { // 主函数开始
    int T; // 定义一个变量T,表示测试用例数量
    cin >> T; // 读入测试用例数量
​
    while (T--) { // 循环处理每个测试用例
        int n, a, b; // 定义变量n、a、b
        cin >> n >> a >> b; // 读入变量n、a、b的值
​
        int l = 0, r = max(a, b); 
        // 二分答案
        while (l < r) { 
            int mid = (l + r + 1) >> 1; 
                // 如果最多能发的人数多于n,则收缩左端点
            if (a / mid + b / mid >= n) l = mid; 
            else r = mid - 1; // 否则移动右端点
        }
​
        cout << l << "\n"; // 输出左端点
    }
} // 主函数结束

Java

import java.util.Scanner;
​
public class Main {
​
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
​
        int T = sc.nextInt();
        while (T-- > 0) {
            int n = sc.nextInt();
            int a = sc.nextInt();
            int b = sc.nextInt();
​
            int l = 0, r = Math.max(a, b);
            // 二分答案
            while (l < r) {
                int mid = (l + r + 1) >> 1;
                // 如果最多能发的人数多于n,则收缩左端点
                if (a / mid + b / mid >= n) l = mid;
                else r = mid - 1; // 否则移动右端点
            }
​
            System.out.println(l);
        }
    }
​
}

Python

T = int(input())
while T > 0:
    n, a, b = list(map(int, input().split()))
    def check(cnt):
        return a // cnt + b // cnt >= n
​
    l, r = 0, max(a, b)
    #二分答案
    while l < r:
        mid = (l + r + 1) >> 1
        #如果最多能发的人数多于n,则收缩左端点
        if check(mid):
            l = mid
        else:# 否则移动右端点
            r = mid - 1
    print(l)
    T -= 1

Go

// 最大化最小值 ---> 二分答案
package main
import(
    "fmt"
)
​
func main(){
    var t int
    fmt.Scanln(&t)
    for i := 0 ; i < t ; i++{
        var n int
        var a int
        var b int
        fmt.Scanf("%d %d %d\n", &n, &a, &b)
        ans := getResult(n, a, b)
        fmt.Println(ans)
    }
}
// 二分答案
func getResult(n, a, b int) int{
    l := 1
    r := 10001
    for l < r{
        mid := (l + r) / 2
        if check(n, a, b, mid){
            l = mid + 1
        }else{
            r = mid
        }
    }     
    return l - 1
}
// 判断合法性
func check(n, a, b, mid int) bool{
    // ans 计算 最多能分给多少个小孩
    ans := 0
    ans += a / mid
    ans += b / mid
    return ans >= n
}

Js

const rl = require("readline").createInterface({
    input: process.stdin
});
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
async function main() {
    let t = parseInt((await readline()))
    while (t--) {
        const input = (await readline()).split(" ").map(Number)
        const n = input[0],
            a = input[1],
            b = input[2]
        let l = 1,
            r = 20000;
        const check = m => {
            const na = Math.floor(a / m);
            const nb = Math.floor(b / m);
            return (na + nb >= n);
        };
        // 二分答案
        while (l <= r) {
            const mid = Math.floor((l + r) / 2);
            if (check(mid)) l = mid+1;
            else r = mid - 1;
        }
        console.log(l-1);
        
    }
​
}
main()

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

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

相关文章

IDE/以glog为例实践CMake-Gui工具使用

文章目录 概述构建glog编译glog.sln解决方案glog的配置项BUILD_SHARED_LIBSBUILD_TESTINGCMAKE_CONFIGURATION_TYPESCMAKE_INSTALL_PREFIXWITH_GTESTGTest_DIRWITH_GFLAGSgflag_DIRPRINT_UNSYMBOLIZED_STACK_TRACESWITH_SYMBOLIZEWITH_FUZZINGWITH_THREADSWITH_TLSWITH_GMOCKWI…

3分钟了解如何做好项目管理和协作

目录 介绍 什么是项目管理 项目管理三要素 时间 成本 质量 项目启动阶段项目启动负责人要了解四个问题 项目规划阶段 任务分解->任务优先级安排->计划呈现->风险控制 快速呈现项目工作计划 项目启动&#xff1a;信息同步任务分工高效 项目跟踪&#xff1a…

实战:用docker-compose容器化springboot项目

文章目录 前言技术积累docker-compose定义docker-compose文件参数docker-compose命令 实战演示1、创建挂载路径2、编写docker-compose.yml3、启动并管理容器 写在最后 前言 前面我们学习和实战了用dockerfile构建镜像&#xff0c;通过镜像可以任意在docker环境容器化部署项目。…

C++静态联编和动态联编

目录 2.1静态联编 2.2动态联编 2.3虚函数面试题 2.3.1构造函数中使用memset函数 2.3.2this指针与虚函数的调用 2.3.3构造析构函数中调用虚函数 2.3.4动态和静态联编与访问属性和默认值 2.3.5动态创建对象时的析构函数 联编是指计算机程序彼此关联的过程&#xff0c;是把…

Fiddler汉化成功

我安装的fiddler 操作系统是&#xff1a;Win10 64Bit 操作系统的版本号是&#xff1a;v5.0.20194.41348 for .NET 4.6.1 fiddler下载地址&#xff1a; 我用夸克网盘分享了「02-Web调试工具-FiddlerSetup.exe」&#xff0c;点击链接即可保存。 链接&#xff1a;https://pan.quar…

什么是项目里程碑?如何为项目成功设置?

高速公路上每隔一公里就有一个标志牌&#xff0c;这表明你需要进一步行驶才能到达目的地的距离。虽然没有这些标志你也可以到达目的地&#xff0c;但它们的存在使你放心&#xff0c;让你确信走在正确的道路上。 项目里程碑在项目管理中也有同样的作用。当你的项目实现目的时&a…

Linux内核学习----整体概览

目录 1、概述 2、核心抽象及设计选型 2.1. 对进程和内核的抽象 2.2. 对进程地址空间的抽象 2.3. 支持可重入可抢占的内核 2.4. 放松管控与努力回收 2.5. 单块结构内核动态加载模块 2.6. 为系统中的一切活动打拍子 2.7. 一切皆文件的理念 3、Linux整体架构模块说明 3.…

对C++中const的说明

对C中const的说明 在C中&#xff0c;const是一个关键字&#xff0c;用于指定对象或变量是只读的&#xff0c;即不可修改。它可以应用于不同的上下文中&#xff0c;包括&#xff1a; 对象和变量声明&#xff1a;通过在变量或对象的声明前加上const关键字&#xff0c;可以将其标…

ACL2022 Document-Level Event Argument Extraction via Optimal Transport

Document-Level Event Argument Extraction via Optimal Transport 论文&#xff1a;https://aclanthology.org/2022.findings-acl.130/ 代码&#xff1a;- 期刊/会议&#xff1a;ACL 2022 摘要 事件论元抽取&#xff08;EAE&#xff09;是事件抽取的子任务之一&#xff0c…

智驾传感器新风向!拐点将至

“大家都比较关注激光雷达&#xff0c;尤其是在今年整个行业聚焦降本的大背景下&#xff0c;这个赛道还行不行&#xff1f;”6月8日&#xff0c;2023年度&#xff08;第十四届&#xff09;高工智能汽车开发者大会上&#xff0c;高工智能汽车研究院首发《2023-2025年中国汽车市场…

【备战秋招】每日一题:4月29日美团春招第三题:题面+题目思路 + C++/python/js/Go/java带注释

为了更好的阅读体检&#xff0c;为了更好的阅读体检&#xff0c;&#xff0c;可以查看我的算法学习博客第三题-酒王 在线评测链接:P1268 题目内容 塔子哥和他的朋友们共 n 人是一群热爱生活的年轻人&#xff0c;他们经常在一起吃饭&#xff0c;聊天&#xff0c;玩游戏。有一…

预设Preset简单使用

作用 是一个资源文件。可以保存组件、资源、项目设置的属性&#xff0c;将属性应用到组件、资源、项目设置上。 例如&#xff0c;创建一个Transform预设&#xff0c;可记录Transform的属性&#xff0c;其他Transform应用预设&#xff0c;会使用预设中的数据。 文档 预设 预设…

【Vue全家桶高仿小米商城】——(二)Git安装与配置

文章目录 第二章&#xff1a;Git安装和配置一、Windows/Mac/Linux安装二、环境变量配置、开发工具配置Windows - 环境变量Mac/Linux - 环境变量VSCode配置Git使用 VScode git&#xff0c;提交到仓库 三、存储密码 - SSH添加秘钥Git配置命令遇到的问题 四、Git常用命令 第二章&…

新手怎么注册速卖通及其流程?图文详解版不信你还不会!

龙哥发现最近讨论速卖通的人还挺多的&#xff0c;今天龙哥就给大家讲一下新手注册速卖通的流程&#xff0c;特别是需要你提前准备好的资料。感兴趣的朋友接着往下看吧&#xff01; 速卖通店铺注册条件 1、营业执照、商标 速卖通要求注册商家必须具备合法的企业身份或个体工商户…

浅谈职场中的工作失误

浅谈职场中的工作失误 关于职场中的工作失误如何处理失误一点感言 笔者在一家软件公司从事传统的数据运维工作&#xff0c;也有十年之久了。十年的数据运维工作&#xff0c;真是一步一个脚印&#xff0c;一步一个坑踩出来的&#xff0c;也没想到这一干就是十年… 关于职场中的…

SeqTrack: Sequence to Sequence Learning for Visual Object Tracking

摘要 在本文中&#xff0c;我们提出了一种新的序列到序列学习框架的视觉跟踪&#xff0c;称为SeqTrack。它将视觉跟踪转换为一个序列生成问题&#xff0c;它以自回归的方式预测对象边界盒。这与之前的Siamese跟踪器和transformer跟踪器不同&#xff0c;它们依赖于设计复杂的磁…

【活动访谈】发力数字基座 推动物联创新—航天科技控股集团AIRIOT4.0平台发布会活动专访

近日&#xff0c;由航天科技控股集团股份有限公司主办的“数字基座 智慧物联—AIRIOT4.0平台发布会”在北京圆满落幕。航天三院科技委总工程师王连宝应邀出席本次会议并接受媒体采访&#xff0c;共同参与访谈的还有AIRIOT产品研发创始人、航天科技控股集团股份有限公司智慧物联…

python生成日报

目录 一&#xff1a;日报生成工具二&#xff1a;日报工具使用方式三&#xff1a;最终日报生成展示 一&#xff1a;日报生成工具 #!/usr/bin/python # coding:utf8class GetHtml(object):def __init__(self):self._html_head """<html><body style&qu…

美颜滤镜SDK在实时视频应用中的应用

随着智能手机的普及和网络带宽的增强&#xff0c;实时视频应用已经成为了人们日常生活中不可或缺的一部分。而在实时视频应用中&#xff0c;美颜滤镜SDK的应用也越来越广泛。本文将介绍美颜滤镜SDK在实时视频应用中的应用。 一、美颜滤镜SDK的概念 美颜滤镜SDK是一种软件开发工…

Jetpack Compose — 让Composable具备生命周期感知

Jetpack Compose — 让Composable具备生命周期感知 我们将研究不同的方法来实现可组合&#xff08;Composable&#xff09;的生命周期感知。我们还将了解可组合生命周期和视图&#xff08;View&#xff09;生命周期之间的区别。 我们将逐步探索不同的解决方案&#xff0c;以寻…