【BZOJ3680】吊打XXX(模拟退火)
【BZOJ3680】吊打XXX(模拟退火)
题面
题解
模拟退火。。。
就是模拟退火
然后这题有毒
各种调参数之后终于\(AC\)了。。
这种题就是玄学呀。。。
温度要调大
最后跑完还要向四周多\(rand\)几次
保证能够找到最优解。。。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
#include<ctime>
using namespace std;
#define ll long long
#define RG register
#define MAX 20000
#define sqr(x) ((x)*(x))
inline int read()
{
    RG int x=0,t=1;RG char ch=getchar();
    while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
    if(ch=='-')t=-1,ch=getchar();
    while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
    return x*t;
}
struct Node{double x,y,w;}p[MAX],ans;
double mm=1e100;
int n;
double Dis(Node a,Node b){return sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));}
double Calc(Node P)
{
    double ret=0;
    for(int i=1;i<=n;++i)ret+=p[i].w*Dis(P,p[i]);
    if(ret<mm)mm=ret,ans=P;
    return ret;
}
double Rand(){return rand()%100000/100000.00;}
void SA(double T)
{
    Node now=ans;
    while(T>1e-3)
    {
        Node nw;
        nw.x=now.x+T*(2*Rand()-1);
        nw.y=now.y+T*(2*Rand()-1);
        double dlt=Calc(now)-Calc(nw);
        if(dlt>1e-9||exp(dlt/T)>Rand())now=nw;
        T*=0.97;
    }
    for(int i=1;i<=1000;++i)
    {
        now.x=ans.x+T*(2*Rand()-1);
        now.y=ans.y+T*(2*Rand()-1);
        Calc(now);
    }
}
int main()
{
    n=read();
    for(int i=1;i<=n;++i)ans.x+=p[i].x=read(),ans.y+=p[i].y=read(),p[i].w=read();
    ans.x/=n;ans.y/=n;
    Calc(ans);
    SA(1000);
    printf("%.3lf %.3lf\n",ans.x,ans.y);
    return 0;
}
【BZOJ3680】吊打XXX(模拟退火)的更多相关文章
- BZOJ3680:吊打XXX(模拟退火)
		Description gty又虐了一场比赛,被虐的蒟蒻们决定吊打gty.gty见大势不好机智的分出了n个分身,但还是被人多势众的蒟蒻抓住了.蒟蒻们将 n个gty吊在n根绳子上,每根绳子穿过天台的一个 ... 
- [JSOI2004]平衡点/[BZOJ3680]吊打XXX
		[JSOI2004]平衡点/[BZOJ3680]吊打XXX 题目大意: 有\(n(n\le10000)\)个重物,每个重物系在一条足够长的绳子上.每条绳子自上而下穿过桌面上的洞,然后系在一起.假设绳子 ... 
- 【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 ... 
- luogu1337 [JSOI2004]平衡点 / 吊打XXX(模拟退火)
		推荐博客:模拟退火总结(模拟退火)by FlashHu.模拟退火的原理,差不多就是不断地由现有的值不断地试探,不断地转到更优的值,并在一定概率下转到较差的值. 题目传送门:luogu1337 [JSO ... 
- BZOJ3680  吊打XXX 【模拟退火】
		Description gty又虐了一场比赛,被虐的蒟蒻们决定吊打gty.gty见大势不好机智的分出了n个分身,但还是被人多势众的蒟蒻抓住了.蒟蒻们将n个gty吊在n根绳子上,每根绳子穿过天台的一个洞 ... 
- bzoj3680: 吊打XXX(模拟退火)
		题目要求 最小(dis表示绳结到点i的距离),就是个广义费马点的题,模拟退火裸题QAQ 模拟退火就是优化后的爬山算法,一开始先随机一个平均点,接下来如果随机到的点比当前点劣,温度比较高的话也有几率跳过 ... 
- LG1337 [JSOI2004]平衡点 / 吊打XXX  模拟退火
		问题描述 LG1337 题解 模拟退火模板 记住概率公式: \(exp(\frac{dealt}{T}) \times rand \ge R_A^ND^M_AX\) zzk太欧了,我交了一版没过他来了 ... 
- bzoj 3680 吊打xxx 模拟退火
		第一道模拟退火 重心嘛,就是要找到一个点,使其到所有点距离*该点权值和最小 思路:初始化一个T,mint,当T大于mint时,每次随机一个解,如果解比当前解优,直接转移,否则,以某概率(与T正相关)转 ... 
- 洛谷P1337 [JSOI2004]平衡点 / 吊打XXX(模拟退火)
		题目描述 如图:有n个重物,每个重物系在一条足够长的绳子上.每条绳子自上而下穿过桌面上的洞,然后系在一起.图中X处就是公共的绳结.假设绳子是完全弹性的(不会造成能量损失),桌子足够高(因而重物不会垂到 ... 
随机推荐
- 关于字符型char变量
			写程序时,意外发现个很不容易察觉问题出在哪的问题的 scanf("%c",&ch); scanf("%c",&c); printf(" ... 
- phpMyAdmin的使用
			phpMyAdmin的使用 安装MySQL数据库后,用户即可在命令行提示符下进行创建数据库和数据表等各种操作,但这种方法非常麻烦,而且需要有专业的SQL语言知识.PHP官方开发了一个类似于SQL Se ... 
- Java实现邮箱验证
			Java实现邮箱验证 JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输.我们可以基于JavaMail开 ... 
- backgroud背景色样式兼容ie8 rgba()用法
			今天遇到了一个问题,要在一个页面中设置一个半透明的白色div.这个貌似不是难题,只需要给这个div设置如下的属性即可: background: rgba(255,255,255,.1);但是要兼容到i ... 
- Egret学习笔记 (Egret打飞机-9.子弹对敌机和主角的碰撞)
			运行起来,虽然主角飞机和敌机都在互相发射子弹,但是子弹打中了就和没打中效果是一样的.. 这一章我们就来处理子弹和飞机的碰撞问题. 我们所有的操作都是基于Main这个容器来做的.所以我就把这个处理放到M ... 
- 20170109| javascript记录
			1.时间戳的使用: 在php中的时间戳是以秒为单位的,在js中转换过来的时间戳是以毫秒为单位的.当我们使用js和php同时开发的时候,就需要保证它们都是处于同一时间单位下才好进行相关的计算. 首先说一 ... 
- java I/O框架 (三)基本流
			概述 基本流有字节输入输出流(InputStream,OutputStream),和字符输入输出流(Reader,Writer),它们都是抽象类,作为Java IO API中其他所有流的父类存在. 我 ... 
- 关于服务器的CPU的几个概念学习总结
			物理CPU 物理CPU: 物理CPU是指插在主板上面的CPU芯片.即指在主板上肉眼能看到的CPU的个数.一般而言,个人台式机或笔记本上只会有一个物理CPU芯片.而服务器主板上往往有多个物理CPU. L ... 
- Android的ListView异步加载图片时,错位、重复、闪烁问题的分析及解决方法
			Android ListView异步加载图片错位.重复.闪烁分析以及解决方案,具体问题分析以及解决方案请看下文. 我们在使用ListView异步加载图片的时候,在快速滑动或者网络不好的情况下,会出现图 ... 
- gm8180:arm linux启动加载模块、运行程序
			1. init #!/bin/busybox ash#load modules mao 2013-02-16 14:12:48 echo "************************m ... 
