宝石收集——蓝桥杯c++b
作者:
编号002
,
2024-06-02 18:03:30
,
所有人可见
,
阅读 7
//原式=gcd(a,b,c)
//即求最大gcd
//题目数据范围过大,枚举情况必爆
//干脆直接枚举答案
//o(nlogn)
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
const int N=1e5+10;
vector<int> a[N]; //a[i]:数i具有的因子(因子表)
vector<int> b[N]; //b[i]:具有i为因子的数
int c[N];
//样例:
//5
//1 2 3 4 9
int main()
{
for(int i=1;i<N;i++)
for(int j=i;j<N;j+=i)a[j].push_back(i);
//a[1]:1
//a[2]:1 2
//a[3]:1 3
//a[4]:1 2 4
//a[9]:1 3 9
int n;
cin>>n;
for(int i=0;i<n;i++)cin>>c[i];
sort(c,c+n);
for(int i=0;i<n;i++)
{
for(int j=0;j<a[c[i]].size();j++)
b[a[c[i]][j]].push_back(c[i]);
}
//b[1]:1 2 3 4 9 (ans)
//b[2]: 2 4
//b[3]: 3 9
//b[4]: 4
//b[9]: 9
for(int ans=c[n-1];ans>=1;ans--)
{
if(b[ans].size()>=3)
{
cout<<b[ans][0]<<' '<<b[ans][1]<<' '<<b[ans][2];
return 0;
}
}
}