博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P1337 [JSOI2004]平衡点 / 吊打XXX 模拟退火
阅读量:5327 次
发布时间:2019-06-14

本文共 1382 字,大约阅读时间需要 4 分钟。

链接

思路

交了好多发,都是wrong

初始值取平均数就1A了
真的是玄学的算法

代码

// luogu-judger-enable-o2#include 
using namespace std;const double eps=1e-15;int read() { int x=0,f=1;char s=getchar(); for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1; for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0'; return x*f;}struct node { double x,y,w;}e[1007];double n,ansx,ansy;double dis(int a,double x_,double y_) { return sqrt((e[a].x-x_)*(e[a].x-x_)+(e[a].y-y_)*(e[a].y-y_));}double calc(double x,double y) { double ans=0; for(int i=1;i<=n;++i) ans+=dis(i,x,y)*e[i].w; return ans;}void mnth() { double T=3000; while(T>eps) { double nowx=ansx+(rand()*2-RAND_MAX)*T; double nowy=ansy+(rand()*2-RAND_MAX)*T; double delta=calc(nowx,nowy)-calc(ansx,ansy); // cout<
<<" "<
<<"\n"; if(delta<0) { ansx=nowx,ansy=nowy; } else if(exp(-delta/T)*RAND_MAX>rand()) { ansx=nowx,ansy=nowy; } T*=0.996; }}int main() { // freopen("a.in","r",stdin); srand(time(NULL)); n=read(); for(int i=1;i<=n;++i) { e[i].x=read(),e[i].y=read(),e[i].w=read(); ansx+=e[i].x; ansy+=e[i].y; } ansx/=n; ansy/=n; mnth(); mnth(); mnth(); mnth(); printf("%.3f %.3f\n",ansx,ansy); return 0;}

转载于:https://www.cnblogs.com/dsrdsr/p/10492870.html

你可能感兴趣的文章
PLoP(Pattern Languages of Programs,程序设计的模式语言)
查看>>
对PostgreSQL的 SPI_prepare 的理解。
查看>>
android"百码"2——基础小知识积累(逐步完善)2015-06-15
查看>>
解决响应式布局下兼容性的问题
查看>>
京东静态网页练习记录
查看>>
Filebeat Config 参数详解:
查看>>
使用DBCP连接池对连接进行管理
查看>>
【洛谷】【堆+模拟】P2278 操作系统
查看>>
hdu3307 欧拉函数
查看>>
Spring Bean InitializingBean和DisposableBean实例
查看>>
Solr4.8.0源码分析(5)之查询流程分析总述
查看>>
[Windows Server]安装系统显示“缺少计算机所需的介质驱动程序”解决方案
查看>>
[容斥][dp][快速幂] Jzoj P5862 孤独
查看>>
Lucene 学习之二:数值类型的索引和范围查询分析
查看>>
软件开发工作模型
查看>>
Java基础之字符串匹配大全
查看>>
面向对象
查看>>
lintcode83- Single Number II- midium
查看>>
移动端 响应式、自适应、适配 实现方法分析(和其他基础知识拓展)
查看>>
selenium-窗口切换
查看>>