【蓝桥杯】(C++)2024.9.22算法赛——你会二分吗?

news/2024/9/22 16:47:12

你会二分吗?

题目

你会二分吗?

题目分析

1.用两个数组来存储男、女员工的e人值,对数组进行排序,然后男女员工两两配对,使得其最小值最大

for (int i = 0; i < n; i++)
{cin >> m[i];
}
for (int i = 0; i < n; i++)
{cin >> w[i];
}
sort(m, m + n);
sort(w, w + n);

 

int min = m[0] + w[0];
int max = m[n - 1] + w[n - 1];
int mid = (min + max) / 2;

2.采用二分法寻找这个最大的最小值,在二分搜索中用mid表示这个最大的最小值,然后检查是否存在一种配对方式,使得所有配对的e人值都不小于mid

while (mid<max && mid>min)//mid在min和max之间时循环 
{if (check(mid)){min = mid;mid = (mid + max) / 2;}else{max = mid;mid = (min + mid) / 2;}
}

3.使用贪心进行配对,从e人值最小的男员工和女员工开始配对,并检查他们的e人值之和是否大于mid。如果所找到的配对方式使得所有配对的e人值之和都大于或等于mid,那则增大mid值,否则减少mid值。

// 检查是否存在m[i] + w[j] >= x的组合,其中i从0开始,j从n-1开始递减
int check(int x)
{int j = n - 1;for (int i = 0; i < n; i++){if (m[i] + w[j--] < x){return 0;}}return 1;
}

代码(复杂版)

#include <iostream>
#include<algorithm>
using namespace std;int n;
int m[100000], w[100000];// 检查是否存在m[i] + w[j] >= x的组合,其中i从0开始,j从n-1开始递减
int check(int x)
{int j = n - 1;for (int i = 0; i < n; i++){if (m[i] + w[j--] < x){return 0;}}return 1;
}void fun()
{int min = m[0] + w[0];int max = m[n - 1] + w[n - 1];int mid = (min + max) / 2;while (mid<max && mid>min)//mid在min和max之间时循环 {if (check(mid)){min = mid;mid = (mid + max) / 2;}else{max = mid;mid = (min + mid) / 2;}}cout << min;
}int main()
{cin >> n;for (int i = 0; i < n; i++){cin >> m[i];}for (int i = 0; i < n; i++){cin >> w[i];}sort(m, m + n);sort(w, w + n);fun();return 0;
}

代码(简单版)

#include<iostream>
#include<algorithm>
using namespace std;bool com(int x, int y)
{return x > y;
}int main()
{int n;cin >> n;int m[100000], w[100000],c[100001];for (int i = 0; i < n; i++){cin >> m[i];}for (int i = 0; i < n; i++){cin >> w[i];}sort(m, m + n);//小到大排序sort(w, w + n, com);//大到小排序for (int i = 0; i < n; i++){c[i] = w[i] + m[i];}sort(c, c + n);cout << c[0];return 0;
}

  

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/63384.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Filebeat

Filebeat 简介 Filebeat用于转发和集中日志数据的轻量级传送程序。作为服务器上的代理安装,Filebeat监视指定的位置文件或位置,收集日志事件,并将他们转发到Elasticsearch 或Logstash进行索引。 架构图安装Filebeat 下载并安装 wget https://artifacts.elastic.co/download…

Tarjan算法及其应用 总结+详细讲解+详细代码注释

\(\text{Tarjan}\) 1.引入概念 1.强连通分量 1.定义 在有向图 \(G\) 中,强连通分量就是满足以下条件的 \(G\) 的子图:从任意一点出发,都有到达另一个点的路径。 不存在一个或者几个点,使得这个子图加入这些点后,这个子图还满足上一个性质。为什么要限定”在有向图中“而不…

三级数据库技术笔记

数据库应用系统开发方法 数据库应用系统生命周期 软件工程与软件开发方法 瀑布模型 快速原型模型 螺旋模型 DBAS生命周期 DBAS生命周期:项目规划、需求分析、系统设计、实现与部署、运行与维护 规划与分析 可行性分析:经济可行性、技术可行性、操作可行性、开发方案选择 需求…

洛谷P5683 [CSP-J2019 江西] 道路拆除

立下flag:今天一定AC这道题! 题目意思: 思路: 然而并没有分。。 输出-1,祈求CCF的施舍( 30% 的数据,有 \(s_1 = s_2\) 求 1 号点到 \(s_1\) 最短路,再计算不需要的路径。 SPFA,启动! #include<bits/stdc++.h>using namespace std;const int maxn=3010; const i…

golang 项目引入私有仓库包

场景: 当你多个项目,都需要使用一个或者多个方法,那么可以将公共方法,抽成一个包,进行管理(类似Log模块等)。这时候可以将你的包上传到私有的仓库,其他项目引入该包即可。下面来介绍下,如何引用私有仓库的包。 1. 创建一个新的 Git 标签 假设你已经在你的私有 GitLab …

设计模式之——装饰者模式

前言: 装饰者模式是结构性设计模式之一,其在不必改变类文件及不适用继承的情况下,动态的扩展一个对象的功能。它通过创建一个包装对象(即装饰)来包裹真实的对象。 一.定义 动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。 装饰者模式的…

解决vsc中文乱码

关于vs code使用code runner运行python代码出现中文乱码的解决办法_code runner 运行乱码-CSDN博客 Code Runner插件设置 "set PYTHONIOENCODING=utf8 && python -u"

CSP-S 2024 提高组初赛第一轮初赛试题及答案解析

CSP-S 2024 提高组初赛第一轮初赛试题及答案解析 一、 单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项) 1 在 Linux 系统中,如果你想显示当前工作目录的路径,应该使用哪个命令?( ) A pwd B cd C ls D echo 答案 A 解析 A pwd:这个命令是“prin…