洛谷 P1678 烦恼的高考志愿 (Java)

洛谷 P1678 烦恼的高考志愿 (Java)

传送门:P1678 烦恼的高考志愿

题目: 烦恼的高考志愿

题目背景

计算机竞赛小组的神牛 V 神终于结束了高考,然而作为班长的他还不能闲下来,班主任老 t 给了他一个艰巨的任务:帮同学找出最合理的大学填报方案。可是 v 神太忙了,身后还有一群小姑娘等着和他约会,于是他想到了同为计算机竞赛小组的你,请你帮他完成这个艰巨的任务。

题目描述

现有 m m m 所学校,每所学校预计分数线是 a i a_i ai。有 n n n 位学生,估分分别为 b i b_i bi

根据 n n n 位学生的估分情况,分别给每位学生推荐一所学校,要求学校的预计分数线和学生的估分相差最小(可高可低,毕竟是估分嘛),这个最小值为不满意度。求所有学生不满意度和的最小值。

输入格式

第一行读入两个整数 m , n m,n m,n m m m 表示学校数, n n n 表示学生数。

第二行共有 m m m 个数,表示 m m m 个学校的预计录取分数。第三行有 n n n 个数,表示 n n n 个学生的估分成绩。

输出格式

输出一行,为最小的不满度之和。

样例 #1

样例输入 #1

4 3
513 598 567 689
500 600 550

样例输出 #1

32

提示

数据范围:

对于 30 % 30\% 30% 的数据, 1 ≤ n , m ≤ 1000 1\leq n,m\leq1000 1n,m1000,估分和录取线 ≤ 10000 \leq10000 10000

对于 100 % 100\% 100% 的数据, 1 ≤ n , m ≤ 100000 1\leq n,m\leq100000 1n,m100000,估分和录取线 ≤ 1000000 \leq 1000000 1000000 且均为非负整数。

分析:

题目要我们求:在给定学校录取分数线和学生估分情况下,所有学生不满意度之和的最小值。

函数中使用了二分查找的方法,找到学校录取分数线最接近学生估分的学校,然后计算该不满意度。

初始化边界,以及最小不满意度 min。

在循环中,通过二分查找找到最接近学生估分 x 的学校录取分数线,并更新最小不满意度。

二分查找要求数据有序,所以给学校录取分数线数组排个序。

循环遍历每位学生,调用函数 f 计算其不满意度,并累加到 ans 中。

该算法的时间复杂度取决于排序学校录取分数的时间复杂度(通常为 O(mlogm))和遍历所有学生计算不满意度的时间复杂度(O(nlogm))。因此总体时间复杂度为 O((m+n)logm)。

代码:

import java.util.*;
public class Main{static int m,n;static int [] a;static int [] b;public static int f(int x) {int l = 0;int r = m-1;int min =Math.max(a[r],a[r]-a[l]) ;while(l<=r) {int mid = (l+r)/2;min = Math.min(min, Math.abs(a[mid]-x));if(a[mid]>x) {r = mid-1;}else {l = mid+1;}}
//		System.out.printf("min:%d\n",min);return min;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);m = sc.nextInt();n = sc.nextInt();a = new int [m+10];b = new int [n+10];for(int i = 0;i < m;i++) a[i] = sc.nextInt();for(int i = 0;i < n;i++) b[i] = sc.nextInt();Arrays.sort(a,0,m);long ans = 0;for(int i = 0;i < n;i++) {ans += f(b[i]);}System.out.println(ans);sc.close();}
}

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

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

相关文章

[ai笔记5] 个人AI资讯助手实战

欢迎来到文思源想的ai空间&#xff0c;这是技术老兵重学ai以及成长思考的第5篇分享&#xff0c;也是把ai场景化应用的第一篇实操内容&#xff01; 既然要充分学习和了解ai&#xff0c;自然少不了要时常看看ai相关资讯&#xff0c;所以今天特地用字节的“扣子”做了一个ai的资讯…

Java中抽象类和接口的区别

抽象类和接口都是 Java 中多态的常见使用方式. 都需要重点掌握. 同时又要认清两者的区别(重要!!! 常见面试题)。 核心区别: 抽象类中可以包含普通方法和普通字段, 这样的普通方法和字段可以被子类直接使用(不必重写而重写抽象方法), 而接口中不能包含普通方法&#xff08;接口…

宿舍|学生宿舍管理小程序|基于微信小程序的学生宿舍管理系统设计与实现(源码+数据库+文档)

学生宿舍管理小程序目录 目录 基于微信小程序的学生宿舍管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员模块的实现 &#xff08;1&#xff09;学生信息管理 &#xff08;2&#xff09;公告信息管理 &#xff08;3&#xff09;宿舍信息管理 &am…

Windows 安装Redis

Windows下安装Redis详细的操作流程和案例&#xff1a; 下载Redis&#xff1a; 访问Redis官方网站&#xff08;https://redis.io/&#xff09;。在"Download"页面中选择适合你操作系统的稳定版本并下载。 解压Redis安装包&#xff1a; 找到下载的Redis安装包文件&…

CentOS7集群安装JDK1.8

准备工作 1、提前安装三台虚拟机&#xff0c;可以参考:https://mp.csdn.net/mp_blog/creation/editor/136010108 2、三台虚拟机分别配置免密登录&#xff0c;参考&#xff1a;https://blog.csdn.net/LSW_JAVADP/article/details/121757927 安装 JDK 一、官网下载对应JDK 自…

mlxtend,一个非常好用的 Python 库!

前言 Python 的 MLxtend&#xff08;Machine Learning Extensions&#xff09;库是一个强大的工具&#xff0c;为机器学习实验提供了一系列功能强大的扩展和工具。本文将深入探讨 MLxtend 库的核心功能、用法以及如何在机器学习项目中充分发挥其优势。 目录 前言 什么是 MLx…

华为问界M9:全方位自动驾驶技术解决方案

华为问界M9的自动驾驶技术采用了多种方法来提高驾驶的便利性和安全性。以下是一些关键技术&#xff1a; 智能感知系统&#xff1a;问界M9配备了先进的传感器&#xff0c;包括高清摄像头、毫米波雷达、超声波雷达等&#xff0c;这些传感器可以实时监测车辆周围的环境&#xff0…

【在Linux世界中追寻伟大的One Piece】Linux是从哪里来的?又是怎么发展的?基本指令你知道哪些?

目录 1 -> Linux背景 1.1 -> Linux发展史 1.1.1 -> UNIX发展历史 1.1.2 -> Linux发展历史 1.2 -> 开源 1.3 -> 官网 1.4 -> 企业应用现状 1.5 -> 发行版本 1.6 -> OS概念&#xff0c;定位 2 -> Linux下基本指令 2.1 -> Is指令 2…

高效的工作学习方法

1.康奈尔笔记法 在这里插入图片描述 2. 5W2H法 3. 鱼骨图分析法 4.麦肯锡7步分析法 5.使用TODOLIST 6.使用计划模板&#xff08;年月周&#xff09; 7. 高效的学习方法 成年人的学习特点&#xff1a; 快速了解一个领域方法 沉浸式学习方法&#xff1a; 沉浸学习的判据&am…

23种设计模式之抽象工厂模式

目录 什么是抽象工厂模式 基本结构 基本实现步骤 实现代码&#xff08;有注释&#xff09; 应用场景 简单工厂、工厂方法、抽象工厂的区别 什么是抽象工厂模式 抽象工厂模式也是一种创建型设计模式&#xff0c;提供了一系列相关或相互依赖对象的接口&#xff0c;而无需…

微信小程序的图片色彩分析,解决画布网络图片报错问题,窃取网络图片的主色调

1、安装 Mini App Color Thief 包 包括下载包&#xff0c;简单使用都有&#xff0c;之前写了&#xff0c;这里就不写了 网址&#xff1a;微信小程序的图片色彩分析&#xff0c;窃取主色调&#xff0c;调色板-CSDN博客 2、 问题和解决方案 问题&#xff1a;由于我们的窃取图片的…

【C++】:map和set的封装

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下set和map的封装&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数据结构…

【QT+QGIS跨平台编译】之三十八:【GDAL+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、gdal介绍二、文件下载三、文件分析四、pro文件五、编译实践一、gdal介绍 GDAL(Geospatial Data Abstraction Library)是一个用于读取、写入和处理地理空间数据的开源库。它支持多种栅格和矢量地理空间数据格式,包括常见的GeoTIFF、Shapefile、NetCDF、HDF5等,…

《Java 简易速速上手小册》第9章:Java 开发工具和框架 (2024 最新版)

文章目录 9.1 Maven 和 Gradle - 构建与依赖管理的神兵利器9.1.1 基础知识9.1.2 重点案例&#xff1a;使用 Maven 构建 Spring Boot 应用9.1.3 拓展案例 1&#xff1a;使用 Gradle 构建多模块项目9.1.4 拓展案例 2&#xff1a;利用 Gradle Wrapper 确保构建的一致性 9.2 Spring…

制作韦恩图常用软件或网站

韦恩图是一种用于可视化集合之间的关系的图表类型&#xff0c;通常用于显示集合之间的重叠和共同部分。以下是几种常用的制作韦恩图的软件或网站&#xff1a; Microsoft PowerPoint&#xff1a;虽然 PowerPoint 并不是专门用于制作韦恩图的软件&#xff0c;但它具有丰富的图表和…

专业130+总分420+厦门大学847信号与系统考研经验厦大信息系统与通信工程,真题,大纲,参考书。

今年很幸运被厦门大学录取&#xff0c;考研专业课847信号与系统130&#xff0c;数二130&#xff0c;总分420&#xff0c;回头看这将近一年的复习&#xff0c;还是有不少经验和大家分享&#xff0c;希望对大家复习有帮助。专业课&#xff1a; 厦门大学847信号与系统在全国各高校…

【doghead】bifrost的player 版本 windows构建

worker 直接用cmake 构建windows版本看起来也是可以的。我这里尝试用windows 添加文件的方式构建大神都是cmake直接windows构建的 可以参考 mediasoup-sfu-cpp 工程试试ouxianghui大神的vs2022构建bat脚本 D:\XTRANS\soup\mediasoup-server-sfu-ouxianghui-cpp\vc2022 Could No…

C++实现二分查找

目录 例1 例2 例3 例4 例5 例6 例1 704. 二分查找 注意&#xff1a; ①left < right,这里的号是最后一次通过下标mid来判断 ②在偶数的时候mid&#xff0c;左右无所谓&#xff0c;因为left和right都有1&#xff1b; 参考代码 class Solution { public:int search…

Gateway中Spring Security6统一处理CORS

文章目录 一、起因二、解决方法 一、起因 使用了gateway微服务作为整体的网关&#xff0c;并且整合了Spring Security6&#xff1b;还有一个system微服务&#xff0c;作为被请求的资源&#xff0c;当浏览器向gateway发送请求&#xff0c;请求system资源时&#xff0c;遇到CORS…

如何使用 Python 创建 Twitter 应用程序

简介 通过访问 Twitter API&#xff0c;您可以管理社交媒体账户&#xff0c;并且可以从社交媒体中获取数据。如果您代表一个企业或组织&#xff0c;这对品牌推广很有帮助&#xff1b;对于个人用户和业余程序员来说&#xff0c;这也可以是一种有趣的娱乐方式。 在本文中&#…