在一个秘密的森林里,住着一个小精灵名叫小蓝。有一天,他偶然发现了一个隐藏在树洞里的宝藏,里面装满了闪烁着美丽光芒的宝石。这些宝石都有着不同的颜色和形状,但最引人注目标是它们各自独特的 “闪亮度” 属性。每颗宝石都有一个与生俱来的特别能力,可以发出不同强度的闪光。小蓝共找到了 NN 枚宝石,第 ii 枚宝石的 “闪亮度” 属性值为 HiHi,小蓝将会从这 NN 枚宝石中选出三枚进行组合,组合之后的精美程度 SS 可以用以下公式来权衡:
S=HaHbHc⋅LCM(Ha,Hb,Hc)LCM(Ha,Hb)⋅LCM(Ha,Hc)⋅LCM(Hb,Hc)S=HaHbHc⋅LCM(Ha,Hb)⋅LCM(Ha,Hc)⋅LCM(Hb,Hc)LCM(Ha,Hb,Hc)
其中 LCMLCM 表示的是最小公倍数函数。
小蓝想要使得三枚宝石组合后的精美程度 SS 尽可能的高,请你帮他找出精美程度最高的方案。假如存在多个方案 SS 值类似,优先选择按照 HH 值升序分列后字典序最小的方案。
输入格式
第一行包含一个整数 NN 表示宝石个数。
第二行包含 NN 个整数表示 NN 个宝石的 “闪亮度”。
输特别式
输出一行包含三个整数表示满足条件的三枚宝石的 “闪亮度”。
最直接的做法就是暴力,不外只能骗骗分。
#include <iostream>
#include <vector>
#include <algorithm> // for max function
#include <climits> // for INT_MIN
using namespace std;
// 计算GCD
long long gcd(long long a, long long b) {
if (b == 0) return a;
return gcd(b, a % b);
}
// 计算LCM
long long lcm(long long a, long long b) {
return (a / gcd(a, b)) * b; // 先除后乘,避免溢出
}
// 计算三个数的LCM
long long lcm_three(long long a, long long b, long long c) {
return lcm(lcm(a, b), c);
}
signed main() {
long long n;
cin >> n;
vector<long long> a(n);
for (long long i = 0; i < n; i++) {
cin >> a[i];
}
sort(a.begin(),a.end());
long long max_value = INT_MIN; // 初始化为极小值
long long result_a = 0, result_b = 0, result_c = 0;
// 遍历所有三元组
for (long long i = 0; i < n; i++) {
for (long long j = i + 1; j < n; j++) {
for (long long k = j + 1; k < n; k++) {
// 计算三个数的LCM
long long lcm1 = lcm_three(a[i], a[j], a[k]);
long long lcm2=a[i]*a[j]*a[k];
long long lcm3=lcm(a[i],a[j])*lcm(a[j],a[k])*lcm(a[i],a[k]);