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

相关文章:

  • 全球遥控机械手市场调查报告
  • 13、网络名称解析与相关服务全解析
  • 15、DNS与DHCP服务知识解析
  • LangFlow支持语音输入输出吗?多模态扩展可能性分析
  • LangFlow中的数据格式转换:JSON、CSV、XML互转技巧
  • Zephyr基础API使用:新手友好型实战案例
  • 45、Windows Server 2008 技术要点解析
  • 利用Multisim访问用户数据库:自动化测试系统的设计与实现
  • scanner在汽车焊装线的质量追溯应用:完整示例
  • 47、深入解析Active Directory安全、备份与恢复
  • LangFlow与AutoGPT对比:谁更适合构建自主智能体?
  • CANFD数据段结构:新手图文解析
  • LangFlow支持导出为Python代码吗?实现从原型到生产的过渡
  • 小白指南:认识二极管伏安特性曲线的起始导通点
  • LangFlow开源协议解读:商业使用是否合规?
  • 环境监测场景下的数字孪生原型开发全记录
  • 异或门与同或门的逻辑差异对比:一文说清
  • screen+与Framebuffer集成完整指南
  • 嘉立创PCB布线小白指南:原理图到布线一键转换技巧
  • LangFlow Raygun Pulse前端性能监控
  • 41、优化与故障排除:Windows 2000 软件部署全攻略
  • 33、服务器可用性规划、实施与维护指南
  • 38、证书服务规划、实施与维护全攻略
  • 超详细版Packet Tracer下载安装说明:涵盖驱动与兼容性处理
  • 基于I2S的多麦克风阵列采集方案:实战案例解析
  • 44、深入解析Windows 2000远程安装服务(RIS)
  • 45、Windows 2000 RIS 与 Active Directory 部署相关知识解析
  • Vivado块设计工具(BD)通俗解释:图形化搭建系统
  • LangFlow最佳实践:构建问答系统、智能客服与自动化Agent
  • LangFlow工作流分享:10个可复用的大模型应用模板