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

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

模拟退火入坑题


Code:

#include 
#include
#include
#include
#include
#include
using namespace std;//Mystery_Sky//#define M 1000100#define INF 0x3f3f3f3fstruct node { int x, y, w;}point[M];int n;double Ans_x, Ans_y;double t, Ans = 1e18;int sum_x, sum_y;const double delta = 0.993;inline double dist(double x, double y){ double sum = 0; for(int i = 1; i <= n; i++) { double dx = point[i].x - x; double dy = point[i].y - y; sum += sqrt(dx * dx + dy * dy) * point[i].w; } return sum;}inline void SA(){ double x, y; x = Ans_x, y = Ans_y; t = 2000; while(t > 1e-14) { double new_x = x + ((rand()<<1) - RAND_MAX) * t; double new_y = y + ((rand()<<1) - RAND_MAX) * t; double new_ans = dist(new_x, new_y); double DE = new_ans - Ans; if(DE < 0) { Ans_x = x = new_x, Ans_y = y = new_y; Ans = new_ans; } else if(exp(-DE/t) * RAND_MAX > rand()) x = new_x, y = new_y; t *= delta; }}int main() { srand(19260817); srand(rand()); srand(rand()); scanf("%d", &n); for(int i = 1; i <= n; i++) { scanf("%d%d%d", &point[i].x, &point[i].y, &point[i].w); sum_x += point[i].x; sum_y += point[i].y; } Ans_x = (double) sum_x/n; Ans_y = (double) sum_y/n; SA(); SA(); SA(); printf("%.3lf %.3lf\n", Ans_x, Ans_y); return 0;}

转载于:https://www.cnblogs.com/Benjamin-cpp/p/11140859.html

你可能感兴趣的文章
为什么在进行Full GC之前最好进行一次Minor GC
查看>>
atom常用快捷键-mac亲测
查看>>
一个小玩具:NDK编译SDL的例子
查看>>
代码面试之串(转载)
查看>>
基于TCP协议的项目架构之Socket流传输的实现
查看>>
【转】Python读取PDF文档,输出内容
查看>>
C#小知识点记录,对象的深拷贝
查看>>
Linux C Socket编程:文件上传
查看>>
The wealthiest/richest men in the world
查看>>
AFNetworking图片上传
查看>>
iOS设计模式之代理模式
查看>>
Linux下修改用户主目录与锁定上传目录
查看>>
逻辑右/左移与算术右/左移
查看>>
Qt-第一个QML程序-3-自定义一个按钮
查看>>
分布式系统事务一致性解决方案
查看>>
树梅派中文输入法支持
查看>>
[Git] 005 初识 Git 与 GitHub 之分支
查看>>
使用Analyze 和Instruments-Leaks分析解决iOS内存泄露
查看>>
Vue.js的入门
查看>>
【自定义异常】
查看>>