宝石组合

先对公式进行化简,发现精美程度 S 等价于三数的最大公约数 gcd(Ha​,Hb​,Hc​)。因此,问题转化为找出能整除至少 3 个数的最大整数 x,然后找到最小的三个整除x的数

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,x,flag=0;
	cin>>n;
    vector<int>h(n+1);
    unordered_map<int,int>cnt;
	for(int i=1;i<=n;i++){
		cin>>h[i];
		for(int j=1;j<=sqrt(h[i]);j++) {
			if(h[i]%j==0){
				cnt[j]++;
				if(j*j!=h[i]) cnt[h[i]/j]++; 
			}
		}
	}
	// 从大到小查找,找到最大的能整除至少3个的数·
	for(int i=1e5;i>=1;i--){
		if(cnt[i]>=3){
			x=i;
			break;
		}
	}
	//输出最小的三个数
	 sort(h.begin() + 1, h.end());
	for(int i=1;i<=n;i++){
		if(h[i]%x==0){
			cout<<h[i]<<" ";
			flag++;
		}
		if(flag==3) return 0;
	}
	return 0;
}
全部评论

相关推荐

牛客44320985...:你的当务之急是把这个糖的要死的沟槽ide主题改了
点赞 评论 收藏
分享
要AC不要WA:投一天,喜提两笔试
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务