[JSOI2004]平衡点

时间:2021-12-31 20:50:12

题面在这里

题意

...见链接吧

sol

在此发一篇模拟退火的题解

不得不说luogu的数据真是太良心

一句话解释模拟退火:在一个慢慢缩小的范围内随机状态寻找最优解,当转移状态更优时直接接受,当当前状态更优时以一定概率\((exp(dlt/T))\)接受

具体实现请参照代码

#include<bits/stdc++.h>
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<iomanip>
#include<cstring>
#include<vector>
#include<cstdio>
#include<string>
#include<bitset>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#define sqr(x) ((x)*(x))
#define pb push_back
#define RG register
#define il inline
using namespace std;
const int mod=1e9+7;
const int N=1010;
typedef unsigned long long ull;
typedef vector<int>VI;
typedef long long ll;
typedef double dd;
il ll read(){
RG ll data=0,w=1;RG char ch=getchar();
while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
if(ch=='-')w=-1,ch=getchar();
while(ch<='9'&&ch>='0')data=data*10+ch-48,ch=getchar();
return data*w;
} int n;dd mn;
struct point{dd x,y,w;}p[N],ans,now;
il dd make(){return rand()%100000/100000.00;}
il dd dis(point a,point b){return sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));}
il dd calc(point x){
RG dd ret=0;
for(RG int i=1;i<=n;i++)
ret+=p[i].w*dis(x,p[i]);
return ret;
} il void SA(point x){
RG dd T=1e6;
while(T>1e-3){//退火过程
now.x=ans.x+T*(2*make()-1);
now.y=ans.y+T*(2*make()-1);
double dlt=calc(ans)-calc(now);
if(dlt>0||exp(dlt/T)>make())ans=now;
T*=0.996;
}
for(int i=1;i<=50000;++i)//最后在一定范围内搜寻到局部最优解
{
now.x=ans.x+T*(2*make()-1);
now.y=ans.y+T*(2*make()-1);
if(calc(ans)-calc(now)>0)ans=now;
}
} int main()
{
srand(time(NULL)+rand());
n=read();
for(RG int i=1;i<=n;i++)
scanf("%lf%lf%lf",&p[i].x,&p[i].y,&p[i].w);
ans=(point){make(),make(),0};mn=ans.w=calc(ans);
SA(ans);
printf("%.3lf %.3lf\n",ans.x,ans.y);
return 0;
}

考试骗分,模拟退火,你值得拥有!

[JSOI2004]平衡点的更多相关文章

  1. 洛谷 P1337 &lbrack;JSOI2004&rsqb;平衡点 &sol; 吊打XXX 解题报告

    P1337 [JSOI2004]平衡点 / 吊打XXX 题目描述 有 \(n\) 个重物,每个重物系在一条足够长的绳子上.每条绳子自上而下穿过桌面上的洞,然后系在一起.\(X\)处就是公共的绳结.假设 ...

  2. &lbrack;JSOI2004&rsqb;平衡点&sol;&lbrack;BZOJ3680&rsqb;吊打XXX

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

  3. 洛谷 P1337 &lbrack;JSOI2004&rsqb;平衡点 &sol; 吊打XXX

    洛谷 P1337 [JSOI2004]平衡点 / 吊打XXX 点击进入FakeHu的模拟退火博客 神仙模拟退火...去看fakehu的博客吧...懒得写了... 因为精度问题要在求得的最优解附近(大约 ...

  4. luogu1337 &lbrack;JSOI2004&rsqb;平衡点 &sol; 吊打XXX&lpar;模拟退火)

    推荐博客:模拟退火总结(模拟退火)by FlashHu.模拟退火的原理,差不多就是不断地由现有的值不断地试探,不断地转到更优的值,并在一定概率下转到较差的值. 题目传送门:luogu1337 [JSO ...

  5. P1337 &lbrack;JSOI2004&rsqb;平衡点(模拟退火)题解

    题意: 如图:有n个重物,每个重物系在一条足够长的绳子上.每条绳子自上而下穿过桌面上的洞,然后系在一起.图中X处就是公共的绳结.假设绳子是完全弹性的(不会造成能量损失),桌子足够高(因而重物不会垂到地 ...

  6. 洛谷P1337 &lbrack;JSOI2004&rsqb;平衡点 &sol; 吊打XXX&lpar;模拟退火&rpar;

    题目描述 如图:有n个重物,每个重物系在一条足够长的绳子上.每条绳子自上而下穿过桌面上的洞,然后系在一起.图中X处就是公共的绳结.假设绳子是完全弹性的(不会造成能量损失),桌子足够高(因而重物不会垂到 ...

  7. &lbrack;luogu1337&rsqb;&lbrack;bzoj3680&rsqb;&lbrack;JSOI2004&rsqb;平衡点 &sol; 吊打XXX【模拟退火】

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

  8. LG1337 &lbrack;JSOI2004&rsqb;平衡点 &sol; 吊打XXX

    题意 题目描述 如图:有n个重物,每个重物系在一条足够长的绳子上.每条绳子自上而下穿过桌面上的洞,然后系在一起.图中X处就是公共的绳结.假设绳子是完全弹性的(不会造成能量损失),桌子足够高(因而重物不 ...

  9. 洛谷P1337 【&lbrack;JSOI2004&rsqb;平衡点 &sol; 吊打XXX】(模拟退火)

    洛谷题目传送门 很可惜,充满Mo力的Mo拟退火并不是正解.不过这是一道最适合开始入手Mo拟退火的好题. 对模拟退火还不是很清楚的可以看一下 这道题还真和能量有点关系.达到平衡稳态的时候,物体的总能量应 ...

  10. &lbrack;BZOJ3680&rsqb;&lbrack;JSOI2004&rsqb;平衡点 &sol; 吊打XXX

    BZOJ Luogu (洛谷和BZOJ上的数据范围不同,可能需要稍微调一调参数) sol 这题的参数调得我心累 模拟退火的模型可以形象地理解为:不断降温的小球在一个凹凸不平的平面上反复横跳,根据万有引 ...

随机推荐

  1. ruby Errors &amp&semi; Exceptions

    When you first started coding, errors were probably the last thing you wanted to see. After all, it’ ...

  2. date format 精辟讲解

    link: http://*.com/questions/19533933/nsdateformatter-how-to-convert-wed-23-oct-2013-045 ...

  3. java Spring 生命周期

    1.初始化回调 <bean name="userService" class="com.sun.service.UserService" init-met ...

  4. OC - 2&period;OC基础知识介绍

    一.基础语法 1> OC语言和C语言 C语言是面向过程的语言,OC语言是面向对象的语言 OC语言继承了C语言,并增加了面向对象的思想 以下内容只介绍OC语言与C语言的不同之处 2> 关键字 ...

  5. VirtualBox扩展磁盘空间

    进入VB的安装目录, 输入命令 VBoxManage list hdds获得当前所有虚拟机的uuid 选择需要扩展的磁盘, 输入 VBoxManage modifyhd uuid –resize 81 ...

  6. Visual Studio&lpar;VS&rpar; F12 查看DLL源代码

    前言 我在VS中调试某个函数时,突发奇想"能不能使用VS的F12(转到定义)查看这个dll中当前函数的实现(源码),而不是像VS自带功能那样只能看到函数名和参数?" 回想起来在安装 ...

  7. bc计算A股上市新股依次涨停股价

    几年的股市可谓惨不忍睹,不提也罢.唯有打新中签的时候,心里稍微有那么一点点的补偿,于是内心就YY可以30板吗,可以40板吗.于是就写了个连板的bc程序,每次中签的时候就运行一下,然后尽情的YY,然而每 ...

  8. 范性for语义以及pair和ipair的区别

    详情参考 lua手册 1. 范性for语义 在了解pair和ipair前先简单了解下lua中的for循环,这里只阐述范性for循环的语义,范性 for 在自己内部保存迭代函数,实际上它保存三个值:迭代 ...

  9. 前端数据库——WebSQL和IndexedDB

    一.WebSQL WebSQL是前端的一个独立模块,是web存储方式的一种,我们调试的时候会经常看到,只是一般很少使用.并且,当前只有谷歌支持,ie和火狐均不支持. 我们对数据库的一般概念是后端才会跟 ...

  10. 从gitHub上拉取并运行项目

    今天我们来试一下如何从gitHub上拉取一个项目并且运行起来,话不多说,我们直接开搞可好 1.首先我们先获取到项目地址(此处我以自己的项目地址作为示例) 我们选择红圈处的clone or downlo ...