简介

就是模拟退火的物理过程,每次随机逼近乘上温度,以\(e^{\Delta/T}\)的概率接受答案,随机一个概率比较

然后就是调参+乱搞

题目

Bzoj3680:吊打xxx

代码

# 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)的更多相关文章

  1. [JSOI2004]平衡点/[BZOJ3680]吊打XXX

    [JSOI2004]平衡点/[BZOJ3680]吊打XXX 题目大意: 有\(n(n\le10000)\)个重物,每个重物系在一条足够长的绳子上.每条绳子自上而下穿过桌面上的洞,然后系在一起.假设绳子 ...

  2. 模拟退火法(吊打XXX)Bzoj3680

    3680: 吊打XXX Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special Judge Submit: 308  Solved: 94 [Subm ...

  3. BZOJ3680 吊打XXX 【模拟退火】

    Description gty又虐了一场比赛,被虐的蒟蒻们决定吊打gty.gty见大势不好机智的分出了n个分身,但还是被人多势众的蒟蒻抓住了.蒟蒻们将n个gty吊在n根绳子上,每根绳子穿过天台的一个洞 ...

  4. BZOJ3680:吊打XXX(模拟退火)

    Description gty又虐了一场比赛,被虐的蒟蒻们决定吊打gty.gty见大势不好机智的分出了n个分身,但还是被人多势众的蒟蒻抓住了.蒟蒻们将 n个gty吊在n根绳子上,每根绳子穿过天台的一个 ...

  5. bzoj3680: 吊打XXX(模拟退火)

    题目要求 最小(dis表示绳结到点i的距离),就是个广义费马点的题,模拟退火裸题QAQ 模拟退火就是优化后的爬山算法,一开始先随机一个平均点,接下来如果随机到的点比当前点劣,温度比较高的话也有几率跳过 ...

  6. BZOJ3680 : 吊打XXX

    本题就是找一个受力平衡的点 我们一开始假设这个点是(0,0) 然后求出它受到的力,将合力正交分解后朝着合力的方向走若干步,并不断缩小步长,一步步逼近答案 #include<cstdio> ...

  7. 【BZOJ3680】吊打XXX(模拟退火)

    [BZOJ3680]吊打XXX(模拟退火) 题面 BZOJ 题解 模拟退火... 就是模拟退火 然后这题有毒 各种调参数之后终于\(AC\)了.. 这种题就是玄学呀... 温度要调大 最后跑完还要向四 ...

  8. 【BZOJ3680】吊打xxx [模拟退火]

    吊打XXX Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description gty又虐了一场比赛,被虐的蒟蒻 ...

  9. [bzoj3680]吊打XXX_模拟退火

    吊打XXX bzoj-3680 题目大意:在平面上给定n个点,每个点有一个权值.请在平面上找出一个点(不一定在这n个点内找)使得这个点到n个点的距离*权值最小,即求这n个点的重心. 注释:$1\le ...

随机推荐

  1. MarkDown思考

    前言 使用MarkDown有一段时间了,感觉的确很方便.大大提高了工作效率,并带来了良好的工作体验.但是,一直以来我都有一个困惑,就是MarkDown的插件和编辑器纷繁无比,却通常各自有一套自己的实现 ...

  2. Java堆栈内存总结

    在Java中,主要存在四块内存空间,除了保存static类型属性的全局数据区,以及保存虽有方法定义的全局代码区之外,程序员更多的在乎内存中的另外两种区域--对象的生存空间堆(heap)和方法调用及变量 ...

  3. Go学习笔记03-附录

    第三部分 附录 A. 工具 1. 工具集 1.1 go build gcflags ldflags 更多参数: go tool 6g -h 或 [https://golang.org/cmd/gc/] ...

  4. Docker安装Jenkins

    1.下载镜像 docker pull jenkins 2.生成一个容器 docker run -d --name myjenkins -p 8081:8080 -p 50000:50000  --vo ...

  5. Java经典编程题50道之二十一

    求1+2!+3!+...+20!的和. public class Example21 {    public static void main(String[] args) {        sum( ...

  6. phpstorm及webstorm密钥

    选用 server 方式,输入地址:http://idea.iteblog.com/key.php http://idea.lanyus.com/

  7. eclipse设置git忽略文件

    使用eclipse开发的程序员们经常会接触版本控制软件,这里只要说下eclipse使用egit的情况下设置忽略文件. 特此说明在这里使用window->team->ignored对于git ...

  8. filter-api文档

    git地址:https://github.com/jiqianqin/filters 不断优化中,欢迎加入讨论- filter-tags 效果图: 参数 说明 格式 备注 data 展示的数据 [{ ...

  9. JVM笔记6-垃圾回收概述

    JVM进行垃圾回收时要考虑哪的问题如下: 1.如何判定对象为垃圾对象? 1.引用计数法:在对象中添加一个引用计数器,当有地方引用这个对象的时候,引用计数器的值就+1,引用失效的时候,计数器的值就-1, ...

  10. HashPayloadPcapReader

    package net.ripe.hadoop.pcap; import java.io.DataInputStream; import java.io.IOException; import com ...