news 2026/5/13 6:38:35

二分算法进阶

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二分算法进阶

一、高考志愿

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

2、输入格式:第一行读入两个整数 m, n。
第二行共有 m 个数,表示 m 个学校的预计录取分数。
第三行共有 n 个数,表示 n 个学生的估分成绩。

3、输出格式:输出一行,为最小的不满度之和。

4、解析思路:将分数线按升序排序,取中间值(中间的分数线)为临时的适合分数线,实际分数a若大于临时适合分数线,就看更高一点的学校的分数线,否则相反。若该学生的分数高于最高分数 线,则用分数减去分数线;若低于最低分数线,则用最低分数线减去分数;若处于中间某分数线附近,则根据绝对值最小的来取满意度

5、代码如下:

#include<bits/stdc++.h> using namespace std; int school[100001]; long long sum=0; int main() { int m,n; cin>>m>>n; for(int i=1;i<=m;i++) cin>>school[i]; sort(school+1,school+1+m); for(int i=0;i<n;i++) { int a,r=m,l=1,mid; cin >>a; while(l<r) { mid=(l+r)/2; if(a>=school[mid]) l=mid+1; else r=mid; } if(a<school[1]) { sum+=school[1]-a; } else if(l > m) { sum+=a - school[m]; } else { sum+=min(abs(school[l]-a),abs(school[l-1]-a)); } } printf("%lld",sum); return 0; }

二、木材加工

1、问题:木材厂有 n 根原木,现在想把这些木头切割成 k 段长度均为 l 的小段木头(木头有可能有剩余)。
当然,我们希望得到的小段木头越长越好,请求出 l 的最大值。
木头长度的单位是 cm,原木的长度都是正整数,我们要求切割得到的小段木头的长度也是正整数。
例如有两根原木长度分别为 11 和 21,要求切割成等长的 6 段,很明显能切割出来的小段木头长度最长为 5。

2、输入格式:第一行是两个正整数n和k ,分别表示原木的数量,需要得到的小段的数量。
接下来 n 行,每行一个正整数 L,表示一根原木的长度。

3、输出格式:仅一行,即 l 的最大值。
如果连 1cm 长的小段都切不出来,输出 0

4、解析思路:将长度按降序排序,长度不够1cm直接输出0。从中间长度开始锯木头,用count计数,看锯出来的木头数量是否达标,达标则增加锯的长度,没达标就按上一长度(当前的r)来算。

5、代码如下:

#include<bits/stdc++.h> using namespace std; long long n,k,L[100006],sum,count_; bool cmp(int a,int b) { return a>b; } int main() { scanf("%lld%lld",&n,&k); for(int i=1;i<=n;i++) { cin>>L[i]; sum+=L[i]; } sort(L+1,L+1+n,cmp); if(sum<k) printf("0"); else { int l=1,r=L[1]; while(l<=r) { int mid=(l+r)/2; count_=0; for (int i=1;i<=n;i++) { count_+=L[i]/mid; if(count_>k||count_<=k&&L[i]<mid) break; } if(count_>=k) l=mid+1; else r=mid-1; } cout<<r; } return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 5:31:03

LangFlow中的OCR节点:图像文字识别集成方案

LangFlow中的OCR节点&#xff1a;图像文字识别集成方案 在智能应用开发日益复杂的今天&#xff0c;如何快速将现实世界中的非结构化信息——比如一张合同截图、一份扫描版发票或教科书的一页照片——转化为可被大语言模型理解与处理的数据&#xff0c;已成为多模态AI系统构建的…

作者头像 李华
网站建设 2026/5/10 16:33:05

如何安全安装Packet Tracer汉化版(Windows)

如何安全安装 Packet Tracer 汉化版&#xff1a;从零开始的实战指南&#xff08;Windows&#xff09; 你是不是也曾在打开 Cisco Packet Tracer 时&#xff0c;面对满屏英文菜单感到头大&#xff1f;尤其是刚接触网络技术的新手&#xff0c;“Static Route”“Subnet Mask”这…

作者头像 李华
网站建设 2026/5/11 7:41:40

9、网络故障排查与名称解析全解析

网络故障排查与名称解析全解析 一、IP 地址故障排查命令 在网络故障排查中,有几个实用的命令能帮助我们定位问题。 (一)tracert 命令 tracert 命令(在 Linux 系统中是 traceroute 命令)会逐个向网络中的每个跃点(网关/路由器)发送信息包。通过该命令,我们可以确定网…

作者头像 李华
网站建设 2026/4/30 4:47:31

提醒列表模块 Cordova 与 OpenHarmony 混合开发实战

&#x1f4cc; 概述 提醒列表模块展示了所有已创建的提醒。该模块集成了 Cordova 框架与 OpenHarmony 原生能力&#xff0c;提供了完整的提醒管理功能。用户可以查看所有提醒、启用或禁用提醒、编辑提醒和删除提醒。模块支持提醒的分类显示和搜索。 &#x1f517; 完整流程 第一…

作者头像 李华
网站建设 2026/5/7 20:36:23

LangFlow与时间序列预测结合:金融数据分析新思路

LangFlow与时间序列预测结合&#xff1a;金融数据分析新思路 在金融研究的日常实践中&#xff0c;分析师常常面临一个尴尬的现实&#xff1a;一边是堆积如山的历史股价、交易量和财务报表数据&#xff0c;另一边是必须向客户或投资委员会提交清晰、有逻辑、语言流畅的趋势判断。…

作者头像 李华
网站建设 2026/5/3 11:16:09

45、Windows Server 2008 技术要点解析

Windows Server 2008 技术要点解析 1. 核心概念与基础组件 在 Windows Server 2008 的环境中,有多个核心概念和基础组件对于系统的正常运行和管理至关重要。 - SYSVOL :SYSVOL 文件夹在安装 Active Directory 时创建,它包含脚本、组策略信息等,这些信息会复制到域内的…

作者头像 李华