[洛谷1337] 吊打XXX/平衡点 (模拟退火)

题意

n个重物(x,y,w),求平衡时x的位置(x,y)

分析

模拟退火基础题,基于随机数的优化算法,时间复杂度玄学,参数玄学,能不能AC看脸,当然如果参数设定的好,并且在规定时间内多跑几次退火算法,并且每次退火时以上一次退火得到的最优解作为新一次退火的起点,AC的概率还是很大的。

ACcode

#include <bits/stdc++.h>
#define fre freopen("data.in","r",stdin);
#define frew freopen("my.out","w",stdout);
using namespace std;
int n;
struct node{
int x,y,w;
}s[2005];
double ansx,ansy,answ;
double sx,sy,sw;
double energy(double x,double y){
double ans=0,dx,dy;
for(int i=0;i<n;i++){
dx=x-s[i].x;
dy=y-s[i].y;
ans+=(sqrt(dx*dx+dy*dy)*s[i].w);
}
return ans;
} void sa(){
/*
*影响时间复杂度的主要是降温系数,初始温度和截止温度影响不大,
*降温系数相差一个数量级,时间增加一个数量级
*/
double t=3000;
double down=0.996;
sx=ansx,sy=ansy;//以当前获取的最优解作为退火的起点 while(t>1e-15){//当前温度大于设定的停止退火温度,则继续执行退火操作
//在当前最优解的周围随机出一个新的解
double ex=sx+((rand()<<1)-RAND_MAX)*t;
double ey=sy+((rand()<<1)-RAND_MAX)*t;
double ew=energy(ex,ey);
double dif=ew-answ; if(dif<0){//新解比最优解要优,更新最优解
ansx=ex,ansy=ey,answ=ew;
sx=ex,sy=ey;
}
else if(exp(-dif/t)*RAND_MAX>rand()){
sx=ex;
sy=ey;
}
t*=down;
}
}
double MIN_TIME=0.8; void solve(){
while((double)clock()/CLOCKS_PER_SEC<MIN_TIME){//在可接受的时间内多执行几次退火
//cout<<clock()<<endl;
sa();
//cout<<ansx<<ansy<<endl;
}
}
int main(){
//fre;frew;
cin>>n;
for(int i=0;i<n;i++){
cin>>s[i].x>>s[i].y>>s[i].w;
ansx+=s[i].x;
ansy+=s[i].y;
}
//初始化解空间为质心
ansx/=n,ansy/=n;
answ=energy(ansx,ansy); solve();
printf("%.3lf %.3lf",ansx,ansy);
return 0;
}

# [洛谷1337] 吊打XXX/平衡点 (模拟退火)的更多相关文章

  1. bzoj 3680(洛谷1337) 吊打XXX——模拟退火

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3680 https://www.luogu.org/problemnew/show/P1337 ...

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

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

  3. 「 JSOI2004」「LuoguP1337」平衡点 / 吊打XXX(模拟退火

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

  4. BZOJ 3680: 吊打XXX【模拟退火算法裸题学习,爬山算法学习】

    3680: 吊打XXX Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 3192  Solved: 1198[Sub ...

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

    //yy:今天简单入门学了下ORZ 爬山算法:兔子朝着比现在高的地方跳去.它找到了不远处的最高山峰.但是这座山不一定是珠穆朗玛峰.这就是爬山算法,它不能保证局部最优值就是全局最优值. 模拟退火:兔子喝 ...

  6. BZOJ3680 & 洛谷1337:[JSOI2004]平衡点/吊打XXX——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3680 https://www.luogu.org/problemnew/show/P1337 有n ...

  7. 【洛谷 P1337】[JSOI2004]平衡点 / 吊打XXX (模拟退火)

    题目链接 正解就算了吧,谁叫我理生化 语数外 政史地都菜呢 模拟退火真玄学,不知道发生了什么就跑出答案了,原理就算了吧,能用(pianfen)就好. 当重物平衡时,势能一定是最小的,于是当我随机出一个 ...

  8. 【洛谷1337】[JSOI2004] 吊打XXX(模拟退火经典题)

    点此看题面 大致题意: 一个平面上有\(n\)个点,每个点有1个权值,现在要选择平面上的一个点,使这\(n\)个点的权值乘上到达选定点的距离之和最小. 模拟退火 我们可以用模拟退火来做这道题. 先将\ ...

  9. 洛谷P1337 [JSOI2004]平衡点 / 吊打XXX(模拟退火)

    传送门 先坑着,联赛活着回来的话我就写(意思就是我绝对不会写了) //minamoto #include<cstdio> #include<cmath> #include< ...

随机推荐

  1. DbFunctions 作为 LINQ to Entities 查询的一部分使用时,此方法调用规范 CreateDateTime EDM 函数以创建新的 DateTime 对象。

    DbFunctions.CreateDateTime CreateDateTime(year, month,day,hour,minute,second)

  2. 关于php文件操作的几个小trick

    记录一些ctf题目中近期遇到的一些文件操作trick,不定时更新 1.move_uploaded_file 一般用来保存上传的文件,第二个参数一般是最终保存的文件名,针对此函数,若在一定条件下$new ...

  3. 安装wget 、 wget命令

    今天给服务器安装新LNMP环境时,wget 时提示 -bash:wget command not found,很明显没有安装wget软件包.一般linux最小化安装时,wget不会默认被安装. 可以通 ...

  4. OUC_TeamTraining_#1 720

    D - The Mirror of Galadriel Time Limit:2000MS     Memory Limit:0KB     64bit IO Format:%lld & %l ...

  5. polya定理,环形涂色

    环形涂色裸题 #include<iostream> #include<cstdio> #include<algorithm> #include<vector& ...

  6. MAC-下安装php-redis扩展

    MAC下安装php-redis扩展   下载php-redis,地址:https://nodeload.github.com/nicolasff/phpredis/zip/master 下载完成得到p ...

  7. P4127 [AHOI2009]同类分布

    P4127 [AHOI2009]同类分布 题解 好的,敲上数位DP  DFS板子 记录一下填的各位数字之和 sum ,然后记录一下原数 yuan 最后判断一下  yuan%sum==0 不就好啦??? ...

  8. http2.0多路复用

    http/1中的每个请求都会建立一个单独的连接,除了在每次建立连接过程中的三次握手之外,还存在TCP的慢启动导致的传输速度低.其实大部分的http请求传送的数据都很小,就导致每一次请求基本上都没有达到 ...

  9. SSD: Single Shot MultiBox Detector论文阅读摘要

    论文链接: https://arxiv.org/pdf/1512.02325.pdf 代码下载: https://github.com/weiliu89/caffe/tree/ssd Abstract ...

  10. 【Makefile】Makefile的自动化变量$@、$^ 、$<等

    所谓自动化变量,就是这种变量会把“模式”中所定义的一系列的文件自动地挨个取出,直至所有的符合模式的文件都取完了.这种自动化变量只应出现在规则的命令中. $@ 表示规则中的目标文件集.在模式规则中,如果 ...