【2024.10.8练习】宝石组合

news2024/10/8 19:33:03

题目描述


题目分析

由于是求最值,原本考虑贪心,但由于算式过于复杂,首先考虑对算式化简。

进行质因数分解:

H_a=p_1^{a_1}p_2^{a_2}...p_k^{a_k}

H_b=p_1^{b_1}p_2^{b_2}...p_k^{b_k}

H_c=p_1^{c_1}p_2^{c_2}...p_k^{c_k}

因此:

S=H_aH_bH_c\frac{LCM(H_aH_bH_c)}{LCM(H_aH_b)LCM(H_bH_c)LCM(H_aH_c)}

=\prod_{i=1}^{k} p_i^{a_i+b_i+c_i+max(a_i,b_i,c_i)-max(a_i,b_i)-max(b_i,c_i)-max(a_i,c_i)}

不妨设对于每个ia_i\geq b_i\geq c_i,则上式可化简为:

S=\prod_{i=1}^{k}p_i^{a_i+b_i+c_i+a_i-a_i-b_i-a_i}

=\prod_{i=1}^{k}p_i^{c_i}

S=GCD(H_a,H_b,H_c)

用Vene图也可以求出同样结果。

可是以现在的数据量,求任意两个数的最大公因数都会超时,显然不能直接遍历。故采用记忆化数组预处理数据的方式:设长度为max(Hi)数组cnt[i],表示的是i为多少颗宝石的因数,这样i即为这些宝石的一个公因数。而满足条件cnt[i]>=3i最大值,即为所有宝石任取三个的GCD。

	for(int i=1;i<=n;i++){
		cin>>h[i];
		for(int j=1;j<=h[i];j++) {
			if(h[i]%j==0){
				cnt[j]++;
			}
		}
	}

可这样复杂度仍为O(n^2)。联想到素数判定,如果d是n的约数,那么n/d也是n的约数。所以只需要检查1~√n的所有整数就足够了。这样复杂度就可以降为O(n\sqrt{n})


我的代码

注意在遍历中一旦求得gcd就使用break退出循环。

#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
const int MAX_N = 1e5 + 5;
int cnt[MAX_N]; 
int H[MAX_N];
int n;
int gcd;
int main() {
	//输入
	cin >> n;
	for (int i = 0; i < MAX_N; i++)
	{
		cnt[i] = 0;
	}
	for (int i = 0; i < n; i++)
	{
		cin >> H[i];
		//计数
		for (int j = 1; j * j <= H[i]; j++)
		{
			if (H[i] % j == 0) {
				cnt[j]++;
				if (j * j != H[i]) {
					cnt[H[i] / j]++;
				}
			}
		}
	}
	
	//确定最大公约数:
	for (int i = MAX_N-1; i >= 0; i--)
	{
		if (cnt[i] >= 3) {
			gcd = i;
			break;
		}
	}

	//排序
	sort(H, H + n);

	int ans = 0;
	for (int i = 0; i < n; i++)
	{
		if (H[i] % gcd == 0) {
			if (ans <= 2) {
				cout << H[i] << " ";
				ans++;
			}
			else if(ans==2){
				cout << H[i];
			}
		}
	}
	return 0;
}

思路扩展

为了不使用排序,还可以让cnt数组变成Vector向量容器数组vector<int> cnt[i];。若i为H[i]的因数,将H[i] push_back进Vector中,自然按字典序排列。最后按序输出cnt[gcd].at(0)、cnt[gcd].at(1)、cnt[gcd].at(2)即可。

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

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

相关文章

DepthB2R靶机打靶记录

一、靶机介绍 下载地址&#xff1a;https://download.vulnhub.com/depth/DepthB2R.ova 二、信息收集 根据靶机主页显示&#xff0c;确认靶机ip为192.168.242.132 端口扫描 nmap -p- -A 192.168.242.132 发现只开放了8080端口 用dirsearch扫个目录 apt-get update apt-get …

胤娲科技:机械臂「叛逃」记——自由游走,再悄然合体

夜深人静&#xff0c;你正沉浸在梦乡的前奏&#xff0c;突然意识到房间的灯还亮着。此刻的你&#xff0c;是否幻想过有一只无形的手&#xff0c;轻盈地飘过&#xff0c;帮你熄灭那盏碍眼的灯&#xff1f; 又或者&#xff0c;你正窝在沙发上&#xff0c;享受电视剧的紧张刺激&am…

RKMEDIA画面质量调节-QP调节

QP是在视频采集编码过程中的量化参数&#xff0c;其值与画面质量成反比&#xff0c;即QP值越大画面质量越小&#xff0c;其具体调整方法如下&#xff1a; typedef struct rkVENC_RC_PARAM_S {RK_U32 u32ThrdI[RC_TEXTURE_THR_SIZE]; // [0, 255]RK_U32 u32ThrdP[RC_TEXTURE_TH…

一致性哈希算法解析

1. 哈希算法 想象我们的网络世界是一个巨大的环形摩天轮&#xff0c;上面有无数的座位&#xff0c;每个座位都代表了一个存储空间。现在&#xff0c;我们需要将三万张照片安排到这个摩天轮的三台机器上。这些机器我们可以想象成三个大车厢&#xff0c;每个车厢可以装载一部分照…

GIS专业的就业前景

地理信息系统&#xff08;GIS&#xff09;作为一门跨学科的领域&#xff0c;随着技术的发展和应用领域的拓宽&#xff0c;其就业前景日益广阔。GIS专业毕业生可以在多个行业中找到合适的职位&#xff0c;并且随着经验的积累&#xff0c;薪资和职业发展空间都相当可观。 1. 就业…

怎么把图片压缩小一点?几个小技巧帮助你轻松压缩图片大小

怎么把图片压缩小一点&#xff1f;几个小技巧帮助你轻松压缩图片大小 压缩图片大小是许多用户在处理照片时的常见需求&#xff0c;特别是在需要上传图片到网页、发送电子邮件或储存时&#xff0c;减小文件大小可以大大提高效率。以下是五款可以帮助你轻松压缩图片大小的软件&a…

能不能给我讲讲redis中的列表

写在文章开头 本文将从redis源码的角度直接分析列表操作指令,因为大部分指令操作细节区别不是很大,同时为了更专注于列表逻辑的分析,所以本文笔者将以双向链表这个数据结构为核心对lrange、lindex、llen、rpush、lpop几个操作展开介绍,希望对你有帮助。 Hi,我是 sharkChi…

泛微OA设置多个人力资源审批人员

泛微OA设置节点审批人员在不同条件下必须都审批才能过流程 在泛微OA中设置审批人员可以有多个设置方式&#xff0c;大部分情况可以根据会签和非会签控制是否需要所有人都审批&#xff0c;例如&#xff1a; 这里选择的会签就是需要这四个人都必须审批流程&#xff0c;这个流程…

台灯哪种灯光对眼睛好?保护眼睛要选央视公认最好的护眼灯

根据最新的文献当中的近视人群的数据我们发现&#xff0c;亚洲人的近视患病率更高&#xff0c;为70-90%&#xff0c;而美国人和欧洲人的近视患病率为30-40%&#xff0c;也就是说&#xff0c;近视的发病率与种族有关。其次跟近视相关的环境因素有很多&#xff0c;主要有近距离工…

微服务架构Gin-etcd-gRPC接合的入门实践

最近在学习微服务&#xff0c;先后学习gRPC、etcd。学习过这两个技术之后&#xff0c;结合Gin框架&#xff0c;简单实现了一个微服务的小demo了。 以下是各技术在微服务架构中的功能。 Gin框架作为网关&#xff0c;外部请求的统一出口。负责将外部的HTTP请求转化为RPC请求&…

伦敦金实时行情决策辅助!

在伦敦金实时交易的过程中&#xff0c;投资者主要依赖技术分析来辅助自己的投资决策。与基本面分析不同&#xff0c;技术分析侧重于研究金价的走势和市场行为&#xff0c;通过图表和技术指标来预测未来的市场走势。常用的技术分析方法包括&#xff1a; 趋势线和支撑阻力位&…

使用AutoDL安装Mamba官方代码

使用AutoDL安装Mamba 租界的云服务器使用环境ubuntu22.04, cuda 11.8, cudnn8.9 python 3.10 torch2.10 远程连接验证安装条件 使用Pycharm连接远程的云GPU服务器 使用nvidia-smi 和 nvcc -V python conda info-e来验证云主机是否具有安装的条件。 conda创建虚拟环境并安装pyt…

MATLAB - 浮动基座机器人的逆运动学

系列文章目录 前言 本例演示如何解决以浮动底座为模型的机器人的逆运动学问题。浮动底座机器人可以在空间中自由平移和旋转&#xff0c;具有六个自由度。浮动基座机器人的逆运动学问题适用于空间应用&#xff0c;即使用安装在浮动和致动基座上的机械臂在空间操纵物体&#xff0…

鸿蒙开发之ArkUI 界面篇 二十二 层叠布局 Stack

Stack语法格式如下&#xff0c;其实鸿蒙的容器组件的语法都是一样的&#xff0c;只是实现效果和和容器组件的名字不一样而已。 与绝对定位相比&#xff0c;实现更简单些&#xff0c;绝地定位更灵活&#xff0c;如果需要调整子组件的对其方式&#xff0c;需要这样添 加&#xf…

如何使用 WSL 在 Windows 上安装 Linux

如何使用 WSL 在 Windows 上安装 Linux 文章目录 如何使用 WSL 在 Windows 上安装 Linux前言安装WSL命令修改DNS网络右键打开网络和internet设置更改适配器选项属性 前言 在Windows计算机上同时访问Windows和Linux系统的功能&#xff0c;有利于大家学习Linux系统。 版本要求Wi…

Rethinking the Localization in Weakly Supervised ObjectLocalization

论文名称&#xff1a;Rethinking the Localization in Weakly Supervised Object Localization 论文地址&#xff1a;Rethinking the Localization in Weakly Supervised Object Localization (arxiv.org) 1.背景 最近&#xff0c;将WSOL分成两部分(与类无关的对象定位和对象…

Ansible 工具从入门到使用

1. Ansible概述 Ansible是一个基于Python开发的配置管理和应用部署工具&#xff0c;现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点&#xff0c;Pubbet和Saltstack能实现的功能&#xff0c;Ansible基本上都可以实现。 Ansible能批量配置、部署、管理上千台主…

恶意软件基础知识——恶意软件命名

计算机病毒(Computer Virus)指编制或者在计算机程序中插入的破坏计算机功能或者破坏数据&#xff0c;影响计算机使用并且能够自我复制的一组计算机指令或者程序代码。 ——《中华人民共和国计算机信息系统安全保护条例》 恶意软件的定义 恶意软件是一个用来描述恶意应用程序…

SQL进阶技巧:如何优化NULL值引发的数据倾斜问题?

目录 0 场景描述 1 问题分析 1.1 问题剖析 1.2 解决方案 2 小结 0 场景描述 实际业务中有些大量的null值或者一些无意义的数据参与到计算作业中,表中有大量的null值,如果表之间进行join操作,就会有shuffle产生,这样所有的null值都会被分配到一个reduce中,必然产生数…

动态代理有用吗?一文了解靠谱的动态代理有哪些标准

在当今互联网时代中&#xff0c;从网络安全、隐私保护、市场调研和互联网营销到软件测试、缓存管理和数据库连接&#xff0c;用户为了更好地完成此类工作&#xff0c;往往会使用动态代理&#xff0c;那么进一步了解动态代理、明确动态代理的使用场景和选择标准则是十分有必要的…