当前位置: 首页 > 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.cnnetsun.cn/news/192942.html

相关文章:

  • LangFlow与股票行情接口结合:金融信息实时推送
  • VirtualBox虚拟机运行卡顿问题
  • AP0316语音模组深度解析:一站式解决降噪消回音,音频项目党必藏!
  • 18、网络流量路由与过滤全解析
  • unity中利用MRTK添加全息面板并部署到HoloLens 2中
  • 小白指南:认识二极管伏安特性曲线的起始导通点
  • 新手必看:UDS NRC基础概念通俗解释
  • 52、优化和管理软件部署策略:全面指南
  • 55、Windows Server 2003 技术详解与操作指南
  • ubuntu22.04 更新了最新版本chrome插件提示无法使用
  • 告别写代码!LangFlow让你像搭积木一样开发大模型应用
  • 42、软件部署与远程安装服务指南
  • LangFlow Ackee自托管基础统计
  • 基于usb_burning_tool的产线刷机操作指南
  • LangFlow Treo APMP性能监控
  • ModbusTCP报文解析安全风险与防护建议
  • ESP32-CAM如何连接手机APP?一文说清通信机制(Arduino)
  • LangFlow Plausible轻量级隐私友好分析
  • LangFlow DebugBear网页性能测试
  • LangFlow Airbrake快速定位代码缺陷
  • 掌握大数据领域 Hive 的动态分区技术
  • 差模电感的作用与滤波性能深度剖析
  • LangFlow vRealize Operations VMware环境优化
  • 户外泳池漆用什么材料好?资深分析师拆解水池蓝耐水抗氯耐候性能
  • 学生上机常见问题:Multisim主数据库无法打开的系统学习
  • Unity3D中实现实时数字孪生的操作指南
  • Wine 中 GDI 绘制的实现原理分析与架构解读
  • 吉因加冲刺港股:上半年营收2.9亿亏4亿 华大基因与爱尔医疗是股东
  • LangFlow Sentry错误日志追踪
  • 前后端分离校园失物招领系统系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程