ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[JSOI2004] 平衡点 / 吊打XXX

2022-07-08 17:34:09  阅读:148  来源: 互联网

标签:const JSOI2004 int XXX 吊打 模拟退火 参数 答案 wh


link

模拟退火学习笔记。

模拟退火约等于醉汉走路,只不过聪明的醉汉会懂得向更优的方向走。这个算法的本质就是随机找一个解,如果更优则更新当前答案,如果稍劣则给一定概率更新(这个概率和当前温度以及两个答案的差值有关),一直到温度降到某个临界点之后就认为当前的答案就是答案,输出即可。

还有一道题是弱化版(也就是不带权版)。

对于这道题另一个需要注意的是判定方法。对于一个被拉扯的点来说,静止当且仅当合力为0。还有另一种理解方法,这个点静止的时候这个系统的总能量最小,而系统能量等于每根绳子长度乘上力的大小,判定即可。

然后就是参数的选择。AK杀有云“模拟退火参数难调急需欧皇”,真的是这样的。这道题就已经开始卡参数了。总结出的经验是末温和初温是可以妥协的,但down参数和次数是应该尽量提高精度的(前者优先)。

#include<bits/stdc++.h>
//#define feyn
const double down=0.997;
const int N=1010;
using namespace std;
inline void read(int &wh){
	wh=0;int f=1;char w=getchar();
	while(w<'0'||w>'9'){if(w=='-')f=-1;w=getchar();}
	while(w>='0'&&w<='9'){wh=wh*10+w-'0';w=getchar();}
	wh*=f;return;
}

int m,x[N],y[N],w[N];
double nx,ny,na;

inline double f(double xx,double yy){
	double an=0;
	for(int i=1;i<=m;i++){
		double lx=xx-x[i],ly=yy-y[i];
		an+=sqrt(lx*lx+ly*ly)*w[i];
	}
	return an;
}
void solve(){
	double t=10000;
	while((double)clock()/CLOCKS_PER_SEC<0.8){
		double xx=nx+(double)(rand()+rand()-RAND_MAX)*t;
		double yy=ny+(double)(rand()+rand()-RAND_MAX)*t;
		double now=f(xx,yy);
		if(now<na)na=now,nx=xx,ny=yy;
		else if(-(na-now)/t<(double)rand()/RAND_MAX)na=now,nx=xx,ny=yy;
		t*=down;
	}
}

signed main(){
	
	#ifdef feyn
	freopen("in.txt","r",stdin);
	#endif
	
	srand(time(0));
	read(m);
	for(int i=1;i<=m;i++){
		read(x[i]);read(y[i]);read(w[i]);
		nx+=x[i];ny+=y[i];
	}
	nx/=m,ny/=m;
	na=f(nx,ny);solve();
	printf("%.3f %.3f",nx,ny);
	
	return 0;
}

标签:const,JSOI2004,int,XXX,吊打,模拟退火,参数,答案,wh
来源: https://www.cnblogs.com/dai-se-can-tian/p/16459071.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有