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

2023大厂笔试模拟练习网站(含题解)
www.codefun2000.com
最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据,挂载到我们的OJ上,供大家学习交流,体会笔试难度。现已录入200+道互联网大厂模拟练习题,还在极速更新中。欢迎关注公众号“塔子哥学算法”获取最新消息。

提交链接:

https://codefun2000.com/p/P1138

为了更好的阅读体检,可以查看OJ上的题解。进入提交链接,点击右边菜单栏的"查看塔子哥的题解"

在线评测链接: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()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【深入浅出 Spring Security(九)】解决跨域问题和 Axios 所需配置

跨域 一、SpringMVC 跨域的解决方案CrossOrigin&#xff08;注解的方式解决&#xff09;addCorsMappings&#xff08;实现WebMvcConfigurer接口&#xff0c;重写方法&#xff09; 二、Spring Security 跨域的解决方案前后端跨域测试&#xff08;前端相关配置&#xff09; 啥是跨…

怎样才算一个计算机知识体系完整的毕业生

为什么突然想写这个话题呢&#xff1f; 最近有不少新关注的读者&#xff0c;在后台问&#xff1a;大学学 Java 和 C 哪个好找工作&#xff0c;学前端好还是后端好&#xff0c;该学 Vue 还是 React。。。 仿佛看到了自己当年的模样&#xff0c;所以觉得有必要单独写一篇文章&a…

【数据结构与算法】02 栈 (栈的多重含义,静态、动态数组栈(顺序栈),链式栈,双端栈,括号匹配)

一、栈的多重含义1.1 硬件栈1.2 运行时栈1.3 软件栈1.4 技术栈1.5 TCP/IP协议栈 二、数据结构中的栈2.1 概念2.2 栈的操作2.3 数组栈&#xff08;顺序栈&#xff09;2.31 数组栈特性2.32 C语言实现▶ 静态数组栈▶ 动态数组栈 2.4链式栈2.41 链式栈特性2.42 C语言实现 三、进阶…

「展会前线」易天光通信盛装亮相2023越南通讯展会

2023年6月7日&#xff0c;在历经了忙碌有序的前期准备工作后&#xff0c;易天光通信销售团队带着满满的信心踏上了越南通讯展会之旅&#xff01; “千呼万唤始出来&#xff0c;犹抱琵琶半遮面”。2023年6月8日&#xff0c;各方期待已久的2023越南通讯展会在越南胡志明市正式开…

【新版】系统架构设计师 - 系统配置与性能评价

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 系统配置与性能评价考点摘要系统性能概述性能指标性能调整阿姆达尔解决方案性能评价方法 架构 - 系统配置与性能评价 考点摘要 性能指标&#xff08;★★&#xff09;阿姆达尔解决方案&#xff…

第Y3周:yolov5s.yaml文件解读

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 ✅本周任务&#xff1a;将yolov5s网络模型中第4层的C3*2修改为C3*1&#xff0c;第6层的C3*3修改为C3*2。 简单介绍&#xff1a; YOLOv5配置了…

MapBox实现框选查询,多边形范围查询

还是老规矩先来看效果&#xff1a; mapbox官方没有为我们提供框选查询的案例&#xff0c;所以这个功能需要我们自己写。在openlayers框架中是有一个矩形范围查询的例子&#xff0c;但是在maobox没有。 那么我们就来说一下如何来做这个效果吧&#xff0c;首先这个效果可以分为两…

6道常见hadoop面试题及答案解析

Q1.什么是Hadoop&#xff1f;   Hadoop是一个开源软件框架&#xff0c;用于存储大量数据&#xff0c;并发处理/查询在具有多个商用硬件&#xff08;即低成本硬件&#xff09;节点的集群上的那些数据。总之&#xff0c;Hadoop包括以下内容&#xff1a;   HDFS&#xff08;Ha…

红外人体感应灯单片机开发方案

近来&#xff0c;红外人体感应灯受到了居家人们关注和喜爱。为此&#xff0c;宇凡微推出了一款低成本红外人体感应灯单片机方案。红外人体感应灯可应用于走廊、床边、楼梯、衣柜等地方&#xff0c;提供柔和照明作用。人来即亮&#xff0c;人走即灭&#xff0c;不受强光影响睡眠…

位姿估计 | 空间目标位姿估计方法分类总结

目录 前言位姿估计方法分类一、传统位姿估计方法1. 基于特征的位姿估计2. 基于模型的位姿估计 二、深度学习位姿估计方法 总结 前言 本文接着分享空间目标位姿跟踪和滤波算法中用到的一些常用内容&#xff0c;希望为后来者减少一些基础性内容的工作时间。以往分享总结见文章&a…

【C语言】整,浮点型数据存储,大小端。细节拉满!!

目录 一. 整型 1. C语言内置整型家族 类型的意义&#xff1a; 2.整型在内存如何存储的呢&#xff1f; 3. 原码&#xff0c;反码&#xff0c; 补码 原码 反码 补码 4. 当 整型遇上unsigned 会发生什么呢&#xff1f; 1. unsigned 与 signed 解析 2. printf 输出 有无…

【新版】系统架构设计师 - 信息安全技术基础知识

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 信息安全技术基础知识考点摘要信息安全基础知识信息安全系统的组成框架信息加密技术对称加密&#xff08;共享密钥&#xff09;非对称加密&#xff08;公开密钥&#xff09;信息摘要数字签名数字信…

IDEA安装教程2023

在本文中&#xff0c;我们将提供关于如何安装 IntelliJ IDEA 的详细步骤。如果您是初学者或只是想尝试一下 IDEA&#xff0c;我们建议您下载 Community 版。如果您需要更多高级功能&#xff0c;可以选择 Ultimate 版。 步骤一&#xff1a;下载 IntelliJ IDEA 首先&#xff0c;…

路漫漫其修远兮

其实不仅是专业&#xff0c;AI冲击波才刚刚开启&#xff0c;包括博客、自媒体作用也在大幅度下降呢。 很多人看过如下这幅图&#xff1a; 提示工程师确实是在当前大型语言模型不够完善的情况下&#xff0c;通过微调输入的方式来提高模型的性能。随着模型的迭代&#xff0c;这些…

功能测试如何转型自动化测试

在互联网行业&#xff0c;我们是那些被遗忘的技术人。 很多人都觉得&#xff0c;传统开发、运维才是技术含量的一个工作。 但是测试的入门门槛比较低&#xff0c;所做的事情相对有限&#xff0c; 这是我之前跟一些大型互联网软件测试负责人大牛们聊天的时候发现&#xff0c;…

lora,固定模特+固定衣服,怎么实现?

在电商行业&#xff0c;经常会有一个需求&#xff0c;就是把固定的衣服让模型穿上&#xff0c;然后拍很多的图片&#xff0c;放在商品主图、详情页、买家秀...... 人工智能发展到现在&#xff0c;最近aigc也挺热门的&#xff0c;有没有办法用“人工智能”算法就实现这个功能&a…

从1万到1亿需要多少个涨停板?(python)

如果本金只有1万元&#xff0c;需要多少个涨停板才可以到达一亿元呢&#xff1f; 亦或者&#xff0c;如果有一亿元本金&#xff0c;需要多少个跌停板才可以到达一万元。 注&#xff1a;涨停板&#xff08;10%&#xff09;&#xff0c;跌停板&#xff08;-10%&#xff09; 用到的…

在VSCode下利用PlateFormIO开发Arduino的MicroROS遇到的一些问题

文章目录 简介1.在第四节编译工程中&#xff0c;教程使用的vscode是有编译、上传的按钮的。但是我的没有。2.在【6.串口通信-接收实验】中&#xff0c;没有串行监视器&#xff08;Serial Monitor&#xff09;。3.关于trajectory_msgs/msg/joint_trajectory.hpp的相关问题4.关于…

PMP项目管理证书是什么?有什么用?

什么是PMP证书&#xff1f; PMP全称是Project Management Professional&#xff0c;中文全称叫项目管理专业人士资格认证&#xff0c;是由美国项目管理协会(PMI)发起&#xff0c;严格评估项目管理人员知识技能是否具有高品质的资格认证考试&#xff0c;目的是为了给项目管理人…

代码随想录|day13| 栈与队列part03 ● 239. 滑动窗口最大值● 347.前 K 个高频元素● 总结

239. 滑动窗口最大值--------知识点&#xff1a;单调队列 链接&#xff1a;代码随想录 自己写的&#xff0c;报错&#xff1a; class DandiaoQueue{//一个栈或者队列&#xff0c;基本要有进栈出栈两种操作&#xff0c;这里再加上pop出最大值一种操作//底层是deque public:deque…