【BZOJ3680】吊打XXX 计算几何 广义费马点+模拟退火(爬山算法)

本文深入探讨了如何利用优化的模拟退火算法解决具有复杂参数的数学问题,通过实例展示了调整算法参数的重要性,并提供了一个有效的代码实现。文章强调了在面对困难挑战时,合理调参的必要性和效率提升。
部署运行你感兴趣的模型镜像

做题之前:

令一个点到一个分身的距离为两点间的几何距离*这个分身的重力,则到所有分身的距离之和最小的点即为所求。

因此题各种参数实在太恐怖,使得模拟退火TLE/WA无数次。强烈建议此题更名为“吊打出题人”。

在此感谢网上的大神给了我们调参数的伟大参考!!!

吊打XXX C++代码实现:

#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 10010
using namespace std;
int n,x[N],y[N],w[N];double dis,ansx,ansy,xx,yy;
double dist(double x1,double x2,double y1,double y2)
{
	return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		scanf("%d%d%d",&x[i],&y[i],&w[i]);
	double t=1000;
	for(int i=1;i<=n;i++)
		ansx+=x[i]*w[i],ansy+=y[i]*w[i];
	ansx/=n,ansy/=n;
	while(t>0.000000001)
	{
		xx=yy=0;
		for(int i=1;i<=n;i++)
			dis=dist(ansx,x[i],ansy,y[i]),
			xx+=(x[i]-ansx)*w[i]/dis,
			yy+=(y[i]-ansy)*w[i]/dis;
		ansx+=xx*t,ansy+=yy*t;
		t=t>0.5?t*0.5:t*0.98;
	}
	printf("%.3lf %.3lf\n",ansx,ansy);
	return 0;
}


您可能感兴趣的与本文相关的镜像

HunyuanVideo-Foley

HunyuanVideo-Foley

语音合成

HunyuanVideo-Foley是由腾讯混元2025年8月28日宣布开源端到端视频音效生成模型,用户只需输入视频和文字,就能为视频匹配电影级音效

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值