news 2026/6/23 22:16:44

二分算法进阶

作者头像

张小明

前端开发工程师

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/6/23 7:46:08

LangFlow与股票行情接口结合:金融信息实时推送

LangFlow与股票行情接口结合&#xff1a;金融信息实时推送 在金融市场的快节奏环境中&#xff0c;信息就是优势。一个交易员是否能在股价异动的第一时间捕捉到信号&#xff0c;并迅速理解其背后可能的原因&#xff0c;往往决定了策略的成败。然而&#xff0c;传统的工作流中&am…

作者头像 李华
网站建设 2026/6/23 4:24:49

VirtualBox虚拟机运行卡顿问题

本机是华为笔记本前提&#xff1a;WIN11 24H2&#xff0c;关闭内核完整性&#xff0c;打开电脑虚拟化之后&#xff0c;发现虚拟机无法开启无法启用AMD-V或INTEL VT-X可能的原因是 Windows 11 24H2 的虚拟化功能&#xff08;如 VBS&#xff09;与某些 Virtualbox 版本冲突。打开…

作者头像 李华
网站建设 2026/6/23 18:12:28

AP0316语音模组深度解析:一站式解决降噪消回音,音频项目党必藏!

&#x1f449; 做音频项目的兄弟集合&#xff01;是不是总被这些问题卡壳&#xff1a;环境噪音盖过人声、麦克风和喇叭离太近全是回音、模拟/数字音频接口不兼容、调试半天还是出问题&#xff1f;今天给大家安利一款“音频全能王”——AP0316全功能降噪回音消除模组&#xff0c…

作者头像 李华
网站建设 2026/6/22 20:54:06

18、网络流量路由与过滤全解析

网络流量路由与过滤全解析 路由算法对比 在网络路由中,距离向量协议和链路状态算法是两种重要的路由算法。 距离向量协议存在一些缺点。它会导致路由表不断增大,因为它会周期性地向其他路由器通告自己的路由表,即使网络收敛后也是如此,这就增加了网络流量。而且,大型互联…

作者头像 李华
网站建设 2026/6/23 19:33:37

unity中利用MRTK添加全息面板并部署到HoloLens 2中

1.添加 MRTK 基础场景设置&#xff0c;点击 「Add to Scene and Configure...」 选项 【这个选项会自动帮你完成以下操作&#xff1a;删除场景中默认的 Main Camera、Directional Light&#xff1b;生成 MRTK 的核心容器&#xff08;MixedRealityPlayspace&#xff0c;包含适配…

作者头像 李华
网站建设 2026/6/23 19:33:44

小白指南:认识二极管伏安特性曲线的起始导通点

从“门槛电压”看懂二极管&#xff1a;为什么0.7V不是魔法数字&#xff1f;你有没有在电路课上听过这句话&#xff1a;“硅二极管导通压降是0.7V&#xff0c;只要电压到了这个值&#xff0c;它就开始工作。”听起来很简洁&#xff0c;对吧&#xff1f;但如果你真按这个逻辑去设…

作者头像 李华