每日OJ题_牛客_分组_枚举+二分_C++_Java

news2024/12/30 3:46:20

目录

牛客_分组_枚举+二分

题目解析

C++代码

Java代码


牛客_分组_枚举+二分

分组 (nowcoder.com)

描述:

        dd当上了宣传委员,开始组织迎新晚会,已知班里有nnn个同学,每个同学有且仅有一个擅长的声部,把同学们分成恰好mmm组,为了不搞砸节目,每一组里的同学都必须擅长同一个声部,当然,不同组同学擅长同一个声部的情况是可以出现的,毕竟一个声部也可以分成好几个part进行表演,但是他不希望出现任何一组的人过多,否则可能会导致场地分配不协调,也就是说,她希望人数最多的小组的人尽可能少,除此之外,对组内人员分配没有其他要求,她希望你告诉她,这个值是多少,如果无法顺利安排,请输出-1。


题目解析

暴力枚举:从小到大枚举所有可能的最大值,找到第一个符合要求的最大值。

二分优化枚举:二分出符合要求的最大值。

C++代码

#include <iostream>
#include <unordered_map>
using namespace std;
int n, m;
unordered_map<int, int> cnt; // 统计每种声部的⼈数

bool check(int x) // 判断最多⼈数为 x 时,能否分成 m 组
{
    int g = 0; // 能分成多少组
    for(auto& [a, b] : cnt)
    {
        g += b / x + (b % x == 0 ? 0 : 1);
    }
    return g <= m;
}

int main()
{
    cin >> n >> m;
    int hmax = 0; // 统计声部最多的⼈数
    for(int i = 0; i < n; i++)
    {
        int x;
        cin >> x;
        hmax = max(hmax, ++cnt[x]);
    }

    int kinds = cnt.size();
    if(kinds > m) // 处理边界情况
    {
        cout << -1 << endl;
    }
    else
    {
        // // 暴⼒枚举
        // for(int i = 1; i <= hmax; i++) // 枚举所有的最多⼈数
        // {
        // 		if(check(i))
        // 		{
        // 			cout << i << endl;
        // 			break;
        // 		}
        // }
        // ⼆分解法
        int l = 1, r = hmax;
        while(l < r)
        {
            int mid = (l + r) / 2;
            if(check(mid))
            {
                r = mid;
            }
            else
            {
                l = mid + 1;
            }
        }
        cout << l << endl;
    }

    return 0;
}

Java代码

import java.util.*;
public class Main
{
    public static int n, m;
    public static Map<Integer, Integer> hash = new HashMap<>(); // 统计每种声部的⼈数

    public static boolean check(int x) // 判断最多⼈数为 x 时,能否分成 m 组
    {
        int g = 0; // 统计能分成多少组
        for(int a : hash.values())
        {
            g += a / x + (a % x == 0 ? 0 : 1);
        }
        return g <= m;
    }

    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        n = in.nextInt(); m = in.nextInt();
        int hmax = 0; // 所有声部的最⼤值
        for(int i = 0; i < n; i++)
        {
            int x = in.nextInt();
            hash.put(x, hash.getOrDefault(x, 0) + 1);
            hmax = Math.max(hmax, hash.get(x));
        }

        // 边界情况
        int kinds = hash.size();
        if(kinds > m)
        {
            System.out.println(-1);
        }
        else
        {
            // // 暴⼒解法
            // for(int i = 1; i <= hmax; i++)
            // {
            // 		if(check(i))
            // 		{
            // 			System.out.println(i);
            // 			break;
            // 		}
            // }
            // ⼆分解法
            int l = 1, r = hmax;
            while(l < r)
            {
                int mid = (l + r) / 2;
                if(check(mid))
                {
                    r = mid;
                }
                else
                {
                    l = mid + 1;
                }
            }
            System.out.println(l);
        }
    }
}

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

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

相关文章

计算机组成原理:物理层 —— 编码与调制

文章目录 基本概念编码&#xff08;基带调制&#xff09;调制编码与调制码元 编码方式双极性不归零编码双极性归零编码曼彻斯特编码差分曼彻斯特编码优缺点 调制方法基本的带通调制方法调频 FM调幅 AM调相 PM 混合调制方法正交振幅调制 QAM-16 基本概念 编码&#xff08;基带调…

全国外卖霸王餐系统对接详细步骤操作?

对接全国外卖霸王餐系统并选择适合的系统时&#xff0c;你可以考虑以下几个步骤和标准&#xff1a; 明确业务需求&#xff1a;首先确定你的平台需要哪些功能&#xff0c;如展示霸王餐选项、下单、支付、订单跟踪等 。选择信誉良好的服务提供商&#xff1a;选择提供稳定服务的A…

【物流配送中心选址问题】基于改进粒子群算法

课题名称&#xff1a; 基于改进粒子群算法的物流配送中心选址问题 改进方向&#xff1a;动态惯性权重优化粒子群算法 代码获取方式&#xff1a; 模型描述&#xff1a; 待补充 Matlab仿真结果&#xff1a; 1. 模型优化后的仿真结果 2. 初始解对应的物流配送路径图 3. 粒子…

大厂最牛的 Java 面试八股文合集(全彩版),不接受反驳

金九银十已然来临&#xff0c;找工作的小伙伴比比皆是&#xff0c;很对小伙伴早早的就开始储备技术&#xff0c;准备面试了。 为了帮助小伙伴更好的应对面试&#xff0c;我拉来十几个大佬&#xff0c;汇总一线大厂的情况&#xff0c;给你整了一套超全的面试资料&#xff1a; 16…

以后再也不要说程序员不能拿诺贝尔了

当地时间10月8日&#xff0c;瑞典皇家科学院宣布&#xff0c;将2024年诺贝尔物理学奖授予美国普林斯顿大学的约翰霍普菲尔德&#xff08;John J. Hopfield&#xff09;和加拿大多伦多大学的杰弗里辛顿&#xff08;Geoffrey E. Hinton&#xff09;&#xff0c;以表彰他们“为推动…

如何通过视觉分析检测车辆逆行行为

随着交通网络的快速扩展和车辆数量的持续增加&#xff0c;城市交通管理面临着前所未有的挑战。交通事故的多发原因之一是车辆逆行&#xff0c;这种行为不仅严重威胁其他车辆和行人的安全&#xff0c;也加重了交通拥堵问题。因此&#xff0c;如何有效监控并预防车辆逆行成为城市…

亲测分享:四款必备PDF编辑工具!

除了本地PDF编辑器之外&#xff0c;也有一些在线PDF编辑工具&#xff0c;它们不仅能够提供便捷的编辑体验&#xff0c;还能实现跨平台的无缝协作。接下来会为大家推荐一些本地PDF编辑器以及在线PDF编辑器&#xff01; Foxit PDF Edit 直达链接&#xff08;复制到浏览器打开&a…

算法工程师重生之第二十三天(理论基础 分发饼干 摆动序列 最大子序和 )

参考文献 代码随想录 一、理论基础 贪心一般解题步骤 贪心算法一般分为如下四步&#xff1a; 将问题分解为若干个子问题找出适合的贪心策略求解每一个子问题的最优解将局部最优解堆叠成全局最优解 这个四步其实过于理论化了&#xff0c;我们平时在做贪心类的题目 很难去按…

[每日一氵] cython 中如何操作字典——结论是没什么更好的方法

举个例子&#xff0c;把这个函数写成 cython 的来加速 def insert_cell(ids_dict: dict, __id: str, count: int):if __id in ids_dict:ids_dict[__id] countelse:ids_dict[__id] count最简单的方式&#xff0c;就是直接扔到 pyx 文件&#xff0c;然后编译一下&#xff0c;速…

学生家长必备,中小学课本教材电子书批量下载工具

今天再整理更新几个最新的电子书教材网站和下载工具 苏生不惑备用号&#xff0c;分享各种黑科技软件资源和技巧&#xff0c;带你玩转互联网。 首先还是国家中小学智慧教育平台这个网站 https://basic.smartedu.cn/elecEdu 还有在线电子教材网站 http://www.haoduoyun.cc/ …

yolov8/9/10/11模型在中医舌苔分类识别中的应用【代码+数据集+python环境+GUI系统】

yolov8、9、10、11模型在中医舌苔分类识别中的应用【代码数据集python环境GUI系统】 背景意义 目前随着人们生活水平的不断提高&#xff0c;对于中医主张的理念越来越认可&#xff0c;对中医的需求也越来越多。 传统中医的舌诊主要依赖于医生的肉眼观察&#xff0c;仅仅通过这…

【RAG论文精读3】RAG论文综述1(2312.10997)-第1部分

收录于我的专栏&#xff1a;AI修炼之路 简介 论文中英文名 Retrieval-Augmented Generation for Large Language Models: A Survey 面向大型语言模型的检索增强生成&#xff1a;综述 论文地址 arxiv地址&#xff1a;https://arxiv.org/abs/2312.10997 精读理由 这篇综述论…

【C语言刷力扣】LCR 182.动态口令

题目&#xff1a; 解题思路&#xff1a; 字符串拼接&#xff0c;先遍历复制从下标为 target 开始的 len - target 位字符&#xff0c;再遍历复制前 target位字符至末尾。 char* dynamicPassword(char* password, int target) {int len strlen(password);// int num 0;int i …

ant-design为input设置默认值,form失效

1.常规input const [inputValue, setInputValue] useState("111");const handleInputChange (e: React.ChangeEvent<HTMLInputElement>) > {setInputValue(e.target.value)};//使用<Input onChange{handleInputChange} value{inputValue}></Inpu…

【C++】:lambda表达式的高级应用

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 引言 今天 我们来见见lambda表达式的高级用法 用法1&#xff1a;自定义删除器 有些类型的delete方法并不符合自身的析构方法&#xff0c;这时我们就需要自定义删除器。 unique_ptr<FILE> ptr1(fopen…

【java数据结构】ArrayList实例

【java数据结构】ArrayList实例 一、杨辉三角二、打扑克 一、杨辉三角 已知条件&#xff1a;给定行数的大小 思路&#xff1a;首先定义一个二维列表&#xff08;也可以称为集合&#xff09;&#xff0c;我们对每一列处理完&#xff0c;最后把每一列加起来&#xff0c;不就是完整…

构建MySQL健康检查Web应用

构建MySQL健康检查Web应用 在这里将探讨如何将MySQL健康检查功能转换为一个功能完整的Web应用。这个应用允许用户通过简单的Web界面执行MySQL健康检查&#xff0c;并查看详细的结果。我们将逐步介绍代码实现、改进过程以及如何设置和运行这个应用。 1. MySQL健康检查类 首先…

YOLOV5改进系列(2)——CA注意力机制

一、CA注意力机制 1.1 CA注意力机制介绍 Coordinate Attention&#xff08;CA&#xff09;是一种用于移动网络的轻量级注意力机制&#xff0c;旨在在不增加计算成本的前提下增强特征表达能力。与传统的通道注意力机制&#xff08;如Squeeze-and-Excitation&#xff09;不同&am…

修改银河麒麟操作系统V10(SP1)网卡名称为ethx

修改银河麒麟桌面操作系统V10&#xff08;SP1&#xff09;网卡名称为ethx 步骤一&#xff1a;查看当前网卡信息步骤二&#xff1a;修改GRUB配置文件步骤三&#xff1a;更新GRUB配置步骤四&#xff1a;编辑网络接口文件步骤五&#xff1a;重启机器 &#x1f496;The Begin&#…

【电商搜索】现代工业级电商搜索技术-EMNLP2024-无监督的用户偏好学习

【电商搜索】现代工业级电商搜索技术-EMNLP2024-无监督的用户偏好学习 0. 论文信息 Title: Unsupervised Human Preference Learning Authors: Sumuk Shashidhar, Abhinav Chinta, Vaibhav Sahai, Dilek Hakkani Tur Comments: EMNLP 2024 Main Conference https://arxiv.org…