14届
1 前缀和+组合数学
2 主要上界 p[i]p[i]p[i+1]*p[i+1]爆掉上界要提前在第一重循环break int128
3 贪心
4 快慢指针
5 tuple用法
include <bits/stdc++.h>
using namespace std;
define int long long
int lcm(int a,int b) {
return a*b/(__gcd(a,b));
}
signed main() {
int n;
cin >> n;
vector
for (int i = 0; i < n; ++i) cin >> H[i];
int bestS = -1;
tuple<int, int, int>a;
// 暴力枚举所有三枚宝石的组合
for (int i = 0; i < n; ++i) {
for (int j = i + 1; j < n; ++j) {
for (int k = j + 1; k < n; ++k) {
int Ha = H[i], Hb = H[j], Hc = H[k];
int LCM_ab = lcm(Ha, Hb);
int LCM_ac = lcm(Ha, Hc);
int LCM_bc = lcm(Hb, Hc);
int LCM_abc = lcm(LCM_ab, Hc);
int S = (Ha * Hb * Hc) * LCM_abc / (LCM_ab * LCM_ac * LCM_bc);
if (S > bestS) {
bestS = S;
a = make_tuple(i, j, k);
} else if (S == bestS) {
tuple<int,int,int> c = {Ha, Hb, Hc};
tuple<int,int,int> b = {H[get<0>(a)], H[get<1>(a)], H[get<2>(a)]};
if (c<b) {
a = make_tuple(i, j, k);
}
}
}
}
}
// auto [i, j, k] = a;
vector
sort(result.begin(), result.end());
for (int v : result) {
cout << v << " ";
}
}
浙公网安备 33010602011771号