两两配对问题

2023-11-09

1、两两配对差值最小

题目描述:给定一个长度为偶数的数组arr,将该数组中的数字两两配对并求和,在这些和中选出最大和最小值,请问该如何两两配对,才能让最大值和最小值的差值最小?
分析: 主要是利用了c++里面对数组的一个排序函数sort(数组名,数组名 + 数组长度)。使用这个函数需要导入#include求两两配对差值最小,其实就是把输入的数字排排序之后,从中间两位开始求和,再从中间向外面拓展一次求和,然后把求和的结果存到一个数组,再对这个数组排序,求最大最小值之差就可。

int find(vector<int>arr)
  int n=arr.size();
  sort(arr,arr+n); // 升序排序
  int max=INT_MIN;
  int min=INT_MAX;
 
  for(int i = 0 ;i<(n/2);i++){
    max = max(max, arr[i]+arr[n-i-1]);
    min = min(min, arr[i]+arr[n-i-1]);
  }
  return max-min;
}


2、两两配对完成任务

题目描述: 小Q有M(M为偶数)名员工, 第i名员工完成工作的时候有一个拖延时间值ti。现在小Q手里有M/2份工作需要完成, 每一份工作都需要安排两名员工参与, 对于第i份工作所需完成的时间为两名员工的拖延时间值总和。现在M/2份工作同时开始进行,小Q希望所有工作结束的时间尽量早, 请你帮小Q设计一个优秀的员工分配方案,使得用尽量少的时间完成所有工作,并输出工作所需的最短时间。

输入描述:第一行为一个正整数n(1<=n<=105)。接下来有n行,每行两个正整数x和y,表示有x名员工的拖延时间值为y(1<=y<=109)。保证所有x的总和等于M(2<=M<=109), 保证M为偶数。

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct node {
	int x; //x名员工
	int y; //该x名员工的拖延时间都为y
};
bool cmp(node a, node b) {
	return a.y < b.y;
}
int main() {
	int n;
	cin >> n;
	vector<node> nums(n);
	for (int i = 0; i < n; i++) {
		cin >> nums[i].x;
		cin >> nums[i].y;
	}
	
	//按照时间消耗大小进行排序
	sort(nums.begin(), nums.end(), cmp);
 
	/*
		1.利用贪心算法
		最大时间和最小时间的进行组合
		次大消耗时间的和次小时间的进行组合
		2.保证每两个员工完成同一份工作
	*/
	int left = 0;
	int right = n - 1;
	int res = 0;
	while (left <= right) {
 
		//记录nums[left]和nums[right]之中最少的员工数
		int number = min(nums[left].x, nums[right].x); 
		//如果left和right 指向了同一组,number必须减半
		//因为nums[left].x和nums[right].x 都要消耗一半 
		if (left == right) {
			number /= 2;
		}
		//计算最少需要的工作时间
		res = max(res, nums[left].y + nums[right].y);
		//更新nums[left]和nums[right]中剩余的可用员工
		nums[left].x -= number;
		nums[right].x -= number;
		//如果可以用的员工变为0了 更新left和right
		if (nums[left].x == 0) left++;
		if (nums[right].x == 0) right--;
	}
	cout << res << endl;
	system("pause");
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

两两配对问题 的相关文章

  • 【超详细】gitee+picgo个人图床搭建+插件安装bug处理

    超详细 gitee picgo个人图床搭建 各种插件安装bug处理 你好我是久远 最近在搭个人静态网页 到了最后一步了 传了几篇文章上去 结果文章传上去 了 图片全都失效了 没有办法 用现成的图床吧 担心哪天网站不稳定 图片全炸掉 所以最后

随机推荐

  • Android10.0 Binder通信原理(九)-AIDL Binder示例

    Android取经之路 的源码都基于Android Q 10 0 进行分析 Android取经之路 系列文章 系统启动篇 Android系统架构Android是怎么启动的Android 10 0系统启动之init进程Android10 0系
  • 【文献调研】慢病患者就医行为预测:就医选择行为有哪些?预测什么?如何预测?慢病患者?

    文章目录 0 吾日三问 1 基于医保数据的就医行为预测及推荐模型的研究 1 1 摘要 1 2 基于张量CP分解的就医行为分组预测模型 1 3 总结 2 居民就医行为主要影响因素的调查研究 2 1 摘要 2 2 相关内容 3 分级诊疗背景下多
  • 2020-11-22

    实验三 XSS和SQL注入 实验目的 了解什么是XSS 了解XSS攻击实施 理解防御XSS攻击的方法 了解SQL注入的基本原理 掌握PHP脚本访问MySQL数据库的基本方法 掌握程序设计中避免出现SQL注入漏洞的基本方法 掌握网站配置 系统
  • Windows批处理(cmd/bat)常用命令小结

    一 前言 批处理文件 batch file 包含一系列 DOS命令 通常用于自动执行重复性任务 用户只需双击批处理文件便可执行任务 而无需重复输入相同指令 编写批处理文件非常简单 但难点在于确保一切按顺序执行 编写严谨的批处理文件可以极大程
  • Josephus问题,数组和链表(C++实现)

    文章目录 问题 需求分析 ADT定义 关键思路 问题 设有n个人围坐在圆桌周围 现从第s个人开始报数 数到第m的人出列 然后从出列的下一个人重新开始报数 数到第m的人又出列 如此反复直到所有的人全部出列为止 需求分析 n个人坐满一张圆桌 为
  • verilog赋多位值_Verilog重点解析(2)(赋值)

    源自 微信公众号 数字芯片实验室 1 连续赋值和过程赋值之间有什么区别 2 initial和always中的赋值有什么区别 initial和always中的赋值都是过程赋值 3 阻塞和非阻塞赋值之间有什么区别 阻塞和非阻塞赋值都是过程赋值
  • Zabbix监控Windows客户端设置

    Zabbix监控Windows客户端设置 一 Windows被控端安装 1 Windows代理下载 2 安装代理 二 检查被控端状态 1 查看端口 2 检查代理服务 3 服务端查看获取被控信息 三 Web端添加被控主机 1 添加主机信息 2
  • [1078]Win10配置Java环境变量

    文章目录 1 下载安装JDK 2 配置环境变量 2 1 找到jdk的安装目录 2 2 添加环境变量 2 3 测试 1 下载安装JDK 下载地址 安装就不赘述了 2 配置环境变量 2 1 找到jdk的安装目录 win e打开资源管理器 找到j
  • 手势控制arduino-wifi小车(含代码)

    手势控制器 小车完成图 贴代码 手势控制器代码 include
  • 使用VHDL语言控制相机

    将CMOS相机与ZYNQ 7000系列FPGA SoC连接 并将实时视频输入输出到VGA屏幕 硬件 软件 概述 在这个项目中 我们将从头开始构建一个FPGA映像平台 目的是将VGA分辨率CMOS相机与MiniZed Development板
  • 计算机超频的好处与坏处,CPU超频有什么坏处,到底会不会有副作用?

    超频是指提高计算机某一部件工作频率而使之工作在非标准频率下的行为及相关行动都应该称之为超频 其中包括CPU超频 主板超频 内存超频 显示卡超频和硬盘超频等等很多部分 一方面 超频可以使系统性能提升 并且提升产品的实用价值 但是对于大多数人仍
  • 图文详解微信小程序如何实现微信授权登录(Java后台)上

    详解微信小程序如何实现微信授权登录 Java后台 springboot框架 附关键源码 jar包依赖
  • STM32HAL 移植 cJSON开源库 (裸机开发神器)

    目录 概述 一 使用方法 二 STM32CubeMx配置 三 Examples 四 运行结果 五 总结 概述 本篇文章介绍如何使用STM32引用 cJSON开源库 JSON格式在互联网数据交互时常用的一个格式 现嵌入式物联网方向 经常使用到
  • php redis消息订阅与发布_PHP实现redis订阅和发布(用于异步任务处理)

    搜索热词 1 概念 名称及含义 channel频道 生产者和消费者直接操作的对象 publish生产者 向channel发送消息 subscribe消费者 订阅一个或多个channel psubscribe消费者 匹配订阅一个或多个chan
  • STM32输出2路PWM-------------------------------major

    major PWM输出 TIM2 TIM3 TIM4 定时器有四个独立通道 可以独立产生PWM 使用的芯片必须是100脚或144才有重映射功能 无重映射功能则使用默认的引脚即可 测试使用TIM3 1 初始化时钟 2 初始化GPIO 3 初始
  • 全国计算机等级考试题库二级C操作题100套(第87套)

    第87套 函数fun的功能是 统计长整数n的各个位上出现数字1 2 3的次数 并通过外部 全局 变量c1 c2 c3返回主函数 例如 当n 123114350时 结果应该为 c1 3 c2 1 c3 2 请在程序的下划线处填入正确的内容并把
  • 2021-11-09 indy使用,局域网发送文件的源代码(idUDPserver,idUDPClient)

    indy使用 局域网发送文件的源代码 idUDPserver idUDPClient 服务端 unit Unit1 interface uses Windows Messages SysUtils Variants Classes Grap
  • 外网测试telnet&SSH漏洞案例分析

    I 问题现象 我司通讯管理机产品 现场要连接外网 安全测试中发现以下问题 II 问题分析 我司通讯管理机产品开通了telnet 以及SSH服务 主要用来远程调试 问题分析 1 Unencrypted Telnet Server Telnet
  • 使用lev00生成电荷密度等高图

    以graphene为例 INCAR SYSTEM graphene ISTART 0 ICHARG 2 Startparameter for this run PREC A Electronic Relaxation ENCUT 500 N
  • 两两配对问题

    1 两两配对差值最小 题目描述 给定一个长度为偶数的数组arr 将该数组中的数字两两配对并求和 在这些和中选出最大和最小值 请问该如何两两配对 才能让最大值和最小值的差值最小 分析 主要是利用了c 里面对数组的一个排序函数sort 数组名