[bzoj3680] 吊打XXX:模拟退火 or 模拟力学情景
来源:互联网 发布:淘宝直播怎么联系商家 编辑:程序博客网 时间:2024/05/02 00:35
题意:n个(n<=10000)质量分别为
可以用模拟退火,更简单的方法是模拟:给绳结一个初始位置,求受力,作用一段时间,产生一段位移。
嗯,都叫模拟……看是想模拟热力学还是力学 QAQ
模拟退火:
http://blog.csdn.net/popoqqq/article/details/39322569
https://zhuanlan.zhihu.com/p/21277465
这个问题其实叫广义费马点:
http://www.matrix67.com/blog/archives/422
#include <cstdio>#include <cmath>#include <cstdlib>using namespace std;const int MAX_N = 10000, loop = 1000;const double pre = 1e-3, init = 1e4, c = 0.993, pi = acos(-1), inf = 1e70;int n;struct Point { double x, y, w; Point(double x=0, double y=0, double w=0): x(x), y(y), w(w) {} Point operator+(Point b) { return Point(x+b.x, y+b.y); } friend Point operator*(double k, Point p) { return Point(k*p.x, k*p.y); }} P[MAX_N], a;double sum, e = inf;inline double dist(const Point& a, const Point& b){ return sqrt((a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y));}inline double J(const Point& p){ double r = 0; for (int i = 0; i < n; ++i) r += dist(p, P[i]) * P[i].w; if (r < e) { a = p; e = r; } return r;}inline double r(){ return (double)rand()/RAND_MAX;}inline void move(Point& p, Point& q, double d){ double theta = 2*pi*r(); q = p + d*Point(cos(theta), sin(theta));}void SA(){ Point p, q; for (int i = 0; i < n; ++i) p = p + P[i].w/sum*P[i]; double last = J(p); for (double T = init; T >= pre; T *= c) { move(p, q, T); double now = J(q), dE = last - J(q); if (dE > 0 || r() < exp(dE/T)) { p = q; last = now; } } for (int i = 0; i < loop; ++i) { move(a, q, pre); J(q); }}int main(){ srand(2333333); scanf("%d", &n); for (int i = 0; i < n; ++i) { scanf("%lf %lf %lf", &P[i].x, &P[i].y, &P[i].w); sum += P[i].w; } SA(); printf("%.3f %.3f\n", a.x, a.y); return 0;}
0 0
- [bzoj3680] 吊打XXX:模拟退火 or 模拟力学情景
- [BZOJ3680]吊打XXX && 模拟退火
- 【bzoj3680】【吊打XXX】【模拟退火】
- 【BZOJ3680】吊打XXX 广义费马点 模拟退火
- BZOJ3680 吊打XXX(模拟退火算法)
- 【模拟退火\爬山算法】[HYSBZ/BZOJ3680]吊打XXX(吊打GTY)
- 模拟退火法(吊打XXX)Bzoj3680
- BZOJ_P3680 吊打XXX(模拟退火)
- 【BZOJ3680】吊打XXX 计算几何 广义费马点+模拟退火(爬山算法)
- 【BZOJ】【P3680】【吊打XXX】【题解】【模拟退火】
- BZOJ 3680 吊打XXX 模拟退火
- 模拟退火(bzoj 3680: 吊打XXX)
- bzoj 3680 吊打xxx 模拟退火
- bzoj3680 -- 模拟退火
- BZOJ 3680 吊打XXX 计算几何 模拟退火 广义费马点
- [BZOJ 3680]吊打XXX(广义费马点、模拟退火搜索)
- [省选前题目整理][BZOJ 3680]吊打XXX(模拟退火)
- 【BZOJ3680】吊打XXX
- eclipse快捷键
- 自定义View系列(一)安卓坐标系
- 火柴棒等式
- ceph关于multipart读取数据的总结
- JS如何检测手机上APP是否安装的情况
- [bzoj3680] 吊打XXX:模拟退火 or 模拟力学情景
- 山东专升本数学第一讲(笔记)
- Java中如何遍历Map对象的4种方法
- ibatis获取对象map属性的对应key的value值
- js标签的取值与赋值总结
- 结构体struct总结
- C语言结构体的字节对齐原则
- Java基础复习
- Android开源库集锦