模拟退火小结(Bzoj3680:吊打xxx)
简介
就是模拟退火的物理过程,每次随机逼近乘上温度,以\(e^{\Delta/T}\)的概率接受答案,随机一个概率比较
然后就是调参+乱搞
题目
# include <bits/stdc++.h>
# define RG register
# define IL inline
# define Fill(a, b) memset(a, b, sizeof(a))
using namespace std;
typedef long long ll;
const int _(1005);
IL int Input(){
RG int x = 0, z = 1; RG char c = getchar();
for(; c < '0' || c > '9'; c = getchar()) z = c == '-' ? -1 : 1;
for(; c >= '0' && c <= '9'; c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);
return x * z;
}
const double EPS(1e-15);
const double dt(0.99);
double x[_], y[_], w[_], ans, ansx, ansy;
int n;
# define Sqr(x) ((x) * (x))
IL double Dis(RG double x1, RG double y1, RG double x2, RG double y2){
return sqrt(Sqr(x1 - x2) + Sqr(y1 - y2));
}
IL double Sum(RG double x0, RG double y0){
RG double ret = 0;
for(RG int i = 1; i <= n; ++i) ret += Dis(x[i], y[i], x0, y0) * w[i];
return ret;
}
IL double SA(RG double T){
RG double x0 = ansx, y0 = ansy, cnt = 1e18;
for(; T > EPS; T *= dt){
RG double dx = rand() * 2 - RAND_MAX, dy = rand() * 2 - RAND_MAX;
RG double xx = x0 + T * dx;
RG double yy = y0 + T * dy;
RG double ret = Sum(xx, yy);
if(ret < ans) ans = ret, ansx = xx, ansy = yy;
if(ret < cnt || exp((cnt - ret) / T) * RAND_MAX > rand()){
cnt = ret;
x0 = xx, y0 = yy;
}
}
}
int main(RG int argc, RG char* argv[]){
n = Input();
srand(n + 19260817); RG double x0 = 0, y0 = 0;
for(RG int i = 1; i <= n; ++i) x[i] = Input(), y[i] = Input(), w[i] = Input();
for(RG int i = 1; i <= n; ++i) x0 += x[i], y0 += y[i];
x0 /= n; y0 /= n; ansx = x0; ansy = y0;
ans = Sum(x0, y0);
SA(100000);
printf("%.3lf %.3lf\n", ansx, ansy);
return 0;
}
模拟退火小结(Bzoj3680:吊打xxx)的更多相关文章
- [JSOI2004]平衡点/[BZOJ3680]吊打XXX
[JSOI2004]平衡点/[BZOJ3680]吊打XXX 题目大意: 有\(n(n\le10000)\)个重物,每个重物系在一条足够长的绳子上.每条绳子自上而下穿过桌面上的洞,然后系在一起.假设绳子 ...
- 模拟退火法(吊打XXX)Bzoj3680
3680: 吊打XXX Time Limit: 10 Sec Memory Limit: 128 MBSec Special Judge Submit: 308 Solved: 94 [Subm ...
- BZOJ3680 吊打XXX 【模拟退火】
Description gty又虐了一场比赛,被虐的蒟蒻们决定吊打gty.gty见大势不好机智的分出了n个分身,但还是被人多势众的蒟蒻抓住了.蒟蒻们将n个gty吊在n根绳子上,每根绳子穿过天台的一个洞 ...
- BZOJ3680:吊打XXX(模拟退火)
Description gty又虐了一场比赛,被虐的蒟蒻们决定吊打gty.gty见大势不好机智的分出了n个分身,但还是被人多势众的蒟蒻抓住了.蒟蒻们将 n个gty吊在n根绳子上,每根绳子穿过天台的一个 ...
- bzoj3680: 吊打XXX(模拟退火)
题目要求 最小(dis表示绳结到点i的距离),就是个广义费马点的题,模拟退火裸题QAQ 模拟退火就是优化后的爬山算法,一开始先随机一个平均点,接下来如果随机到的点比当前点劣,温度比较高的话也有几率跳过 ...
- BZOJ3680 : 吊打XXX
本题就是找一个受力平衡的点 我们一开始假设这个点是(0,0) 然后求出它受到的力,将合力正交分解后朝着合力的方向走若干步,并不断缩小步长,一步步逼近答案 #include<cstdio> ...
- 【BZOJ3680】吊打XXX(模拟退火)
[BZOJ3680]吊打XXX(模拟退火) 题面 BZOJ 题解 模拟退火... 就是模拟退火 然后这题有毒 各种调参数之后终于\(AC\)了.. 这种题就是玄学呀... 温度要调大 最后跑完还要向四 ...
- 【BZOJ3680】吊打xxx [模拟退火]
吊打XXX Time Limit: 10 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description gty又虐了一场比赛,被虐的蒟蒻 ...
- [bzoj3680]吊打XXX_模拟退火
吊打XXX bzoj-3680 题目大意:在平面上给定n个点,每个点有一个权值.请在平面上找出一个点(不一定在这n个点内找)使得这个点到n个点的距离*权值最小,即求这n个点的重心. 注释:$1\le ...
随机推荐
- Git团队协作之GitFlow & SoucceTree
GitFlow 定义了一个围绕项目发布的严格的分支模型,仍然使用中央仓库作为开发者的交互中心 GitFlow分支 Master分支 Hotfix紧急修改 Release分支 Develop开发分支 F ...
- Sourcetree的安装与使用
1 安装遇到的问题 https://segmentfault.com/q/1010000007643870 解决该问题的方法: http://www.jianshu.com/p/3478e2a214a ...
- centos7下安装apache服务器httpd的yum方式安装
转自Clement-Xu的csdn博客 http://blog.csdn.net/clementad/article/details/41620631 Apache在Linux系统中,其实叫&qu ...
- Git hook实现自动部署
Git Hook 是 Git 提供的一个钩子,能被特定的事件触发后调用.其实,更通俗的讲,当你设置了 Git Hook 后,只要你的远程仓库收到一次 push 之后,Git Hook 就能帮你执行一次 ...
- @Scope注解
@Scope(value=ConfigurableBeanFactory.SCOPE_PROTOTYPE)这个是说在每次注入的时候回自动创建一个新的bean实例 @Scope(value=Config ...
- Java——正则表达式
题目: java中提供了对正则表达式的支持. 有的时候,恰当地使用正则,可以让我们的工作事半功倍! 如下代码用来检验一个四则运算式中数据项的数目,请填写划线部分缺少的代码. 注意:只填写缺少代码,不要 ...
- DAY1--JAVA
学习路线 2017-1-27打卡学习,先学习第一部分Java基础. 面向对象 面向对象---它是从现实世界中客观存在的事物(即对象)出发,并在系统构造中尽可能的运用人类自然的思维方式,来构建软件系统. ...
- Docker系统七:Docker数据管理
Docker的数据管理 I. 基本概念 Docker容器一旦删除,其相关的rootf文件系统就会被删除,其容器内的数据将一并删除,为了保存相关数据,Docker提出了数据卷的概念. II. 数据卷 D ...
- 最短路径问题(Floyd-Warshall模板)
#include<bits/stdc++.h> using namespace std; int n; int x,y; ][]; ][]; int m,s,t; int main() { ...
- Object Detection︱RCNN、faster-RCNN框架的浅读与延伸内容笔记
一.RCNN,fast-RCNN.faster-RCNN进化史 本节由CDA深度学习课堂,唐宇迪老师教课,非常感谢唐老师课程中的论文解读,很有帮助. . 1.Selective search 如何寻找 ...