蓝桥杯15届 宝石组合

发布于:2025-04-05 ⋅ 阅读:(15) ⋅ 点赞:(0)

问题描述

在一个神秘的森林里,住着一个小精灵名叫小蓝。有一天,他偶然发现了一个隐藏在树洞里的宝藏,里面装满了闪烁着美丽光芒的宝石。这些宝石都有着不同的颜色和形状,但最引人注目的是它们各自独特的 “闪亮度” 属性。每颗宝石都有一个与生俱来的特殊能力,可以发出不同强度的闪光。小蓝共找到了 N 枚宝石,第 i 枚宝石的 “闪亮度” 属性值为 Hi​,小蓝将会从这 N 枚宝石中选出三枚进行组合,组合之后的精美程度 S 可以用以下公式来衡量:

其中 LCM 表示的是最小公倍数函数。

小蓝想要使得三枚宝石组合后的精美程度 S 尽可能的高,请你帮他找出精美程度最高的方案。如果存在多个方案 S 值相同,优先选择按照 H 值升序排列后字典序最小的方案。

输入格式

第一行包含一个整数 N 表示宝石个数。

第二行包含 N 个整数表示 N 个宝石的 “闪亮度”。

输出格式

输出一行包含三个整数表示满足条件的三枚宝石的 “闪亮度”。

样例输入

5
1 2 3 4 9

样例输出

1 2 3

评测用例规模与约定

对于 30% 的评测用例:3≤N≤100,1≤Hi≤1000 。

对于 60%的评测用例:3≤N≤2000 。

对于 100% 的评测用例:3≤N≤10^{5},1≤Hi≤10^{5} 。

1.化简公式

①根据公式直接化简:

②推导:

(下面Ha、Hb、Hc表示为H1、H2、H3)

将H1、H2、H3表示成数字相乘的形式,a为H1、H2、H3的最大公约数,b为H1、H2的最大公约数,c为H1、H3的最大公约数,d为H2、H3的最大公约数,efg是H1、H2、H3各自的一部分

H1=abce   H2=abdf   H3=acdg

S=a^{3}b^{2}c^{2}d^{2}efg*\frac{abcdefg}{abcde*abcdeg*abcdfg}=a

最后的结果就是这三个数的最大公约数

25分代码:(暴力)

#include<iostream>
#include<algorithm>
using namespace std;

const int N = 1e5+10;
int n, a[N];
int max1;  //max 是标准库 <algorithm> 中定义的一个函数模板
int ans[3];

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	cin>>n;
	for(int i=1; i<=n; ++i) cin>>a[i];
	
	for(int i=1; i<=n; ++i)
	{
		for(int j=i+1; j<=n; ++j)
		{
			for(int k=j+1; k<=n; ++k)
			{
				if(i!=j && j!=k && i!=k)
				{
					int temp = __gcd(a[i], __gcd(a[j], a[k]));
					if(temp > max1)
					{ 
						max1 = temp;
						ans[0]=a[i], ans[1]=a[j], ans[2]=a[k];
					}
				}
			}
		}
	}
	sort(ans, ans+3);
	cout<<ans[0]<<" "<<ans[1]<<" "<<ans[2];
	
	return 0;
} 


网站公告

今日签到

点亮在社区的每一天
去签到