数学问题(map无处不在)

数学证明题1

很好想的一个思路,就是对于可选的数对bi,bj,连一条边
但是枚举所有可选的数对,T了
咋办???

bi+bj+gcd(bi,bj)=lcm(bi,bj)
找一找规律:
x+y+gcd=lcm
令x<=y
当x=y,3x!=x
当x<y,
lcm%y=0,(x+y+gcd)%y=0
而 x<x+gcd<2x,x<y
易知 x+gcd=y
又因为gcd=x* y/lcm
解得:结论 y=3/2 *x
推论:对于偶数x,其对应的y只有一个;而奇数x,无对应的y

map查找x有无对应的y即可

以下展示无敌的map

#include<bits/stdc++.h>
using namespace std;
const int N=3e5+10;
long long a[N];
map<long long,int>m;
int main() {
    
    
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
    
    
		cin>>a[i];
		m[a[i]]++;
	}
	sort(a+1,a+n+1);
	long long ans=-1e9;
	for(int i=1;i<=n;i++){
    
    
		long long t=a[i],sum=0;
		while(m[t]){
    
    
			sum+=t*m[t];
			m[t]=0;
			if(t%2)break;
			else t=t/2*3; 
		}
		ans=max(ans,sum);
	}
	cout<<ans;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43602607/article/details/109539372