当前位置: 首页 > news >正文

二分算法进阶

一、高考志愿

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; }
http://www.jsqmd.com/news/126439/

相关文章:

  • cesium126,240607,Ce for Ue 测量面积 -下:测量面积的逻辑实现,蓝图代码实现
  • 股票搜索热度分析报告 - 2025-12-23 03:39:02
  • VirtualBox虚拟机运行卡顿问题
  • 12、Windows Server 2008 DNS服务配置与管理全解析(上)
  • 全球遥控机械手市场调查报告
  • XDMA与RDMA性能对比分析:核心要点
  • 创建提醒模块 Cordova 与 OpenHarmony 混合开发实战
  • LangFlow中的OCR节点:图像文字识别集成方案
  • 全球液态食品纸基屋顶盒市场分析报告
  • 13、网络名称解析与相关服务全解析
  • 基于Java+SSM+SSM电子商务平台(源码+LW+调试文档+讲解等)/电商平台/电子商务/网络购物平台/电商交易平台/在线交易平台/电子商务系统
  • 新手必看:避免Keil中文注释乱码的三个关键步骤
  • 14、WINS服务器与GlobalNames区域部署全解析
  • LangFlow中的机器学习模型加载:支持Scikit-learn等框架
  • 门思科技正式开放 ThinkLink 纯国产化物联网平台免费部署方案
  • 使用STM32CubeMX配置ADC采集:实战案例
  • openvas入门docker安装大坑
  • 15、DNS与DHCP服务知识解析
  • 内容平台的范式转移:从UGC到AIGC+社交的演进
  • unity中利用MRTK添加全息面板并部署到HoloLens 2中
  • 16、DHCP服务全面解析与管理指南
  • 面向高性能存储的USB3.2速度接口架构设计
  • 如何安全安装Packet Tracer汉化版(Windows)
  • 17、DHCP服务与网络路由过滤知识详解
  • Unity中MRTK下载相关功能配置(适用HoloLens 2 部署)
  • LangFlow中的时间延迟设置:模拟真实场景响应节奏
  • ESP32 Arduino环境搭建超详细版配置流程
  • LangFlow中的数据格式转换:JSON、CSV、XML互转技巧
  • LangFlow支持语音输入输出吗?多模态扩展可能性分析
  • 9、网络故障排查与名称解析全解析