# [洛谷1337] 吊打XXX/平衡点 (模拟退火)
[洛谷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/平衡点 (模拟退火)的更多相关文章
- bzoj 3680(洛谷1337) 吊打XXX——模拟退火
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3680 https://www.luogu.org/problemnew/show/P1337 ...
- 【BZOJ3680】吊打XXX(模拟退火)
[BZOJ3680]吊打XXX(模拟退火) 题面 BZOJ 题解 模拟退火... 就是模拟退火 然后这题有毒 各种调参数之后终于\(AC\)了.. 这种题就是玄学呀... 温度要调大 最后跑完还要向四 ...
- 「 JSOI2004」「LuoguP1337」平衡点 / 吊打XXX(模拟退火
题目描述 如图:有n个重物,每个重物系在一条足够长的绳子上.每条绳子自上而下穿过桌面上的洞,然后系在一起.图中X处就是公共的绳结.假设绳子是完全弹性的(不会造成能量损失),桌子足够高(因而重物不会垂到 ...
- BZOJ 3680: 吊打XXX【模拟退火算法裸题学习,爬山算法学习】
3680: 吊打XXX Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 3192 Solved: 1198[Sub ...
- BZOJ 3680: 吊打XXX (模拟退火)
//yy:今天简单入门学了下ORZ 爬山算法:兔子朝着比现在高的地方跳去.它找到了不远处的最高山峰.但是这座山不一定是珠穆朗玛峰.这就是爬山算法,它不能保证局部最优值就是全局最优值. 模拟退火:兔子喝 ...
- BZOJ3680 & 洛谷1337:[JSOI2004]平衡点/吊打XXX——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=3680 https://www.luogu.org/problemnew/show/P1337 有n ...
- 【洛谷 P1337】[JSOI2004]平衡点 / 吊打XXX (模拟退火)
题目链接 正解就算了吧,谁叫我理生化 语数外 政史地都菜呢 模拟退火真玄学,不知道发生了什么就跑出答案了,原理就算了吧,能用(pianfen)就好. 当重物平衡时,势能一定是最小的,于是当我随机出一个 ...
- 【洛谷1337】[JSOI2004] 吊打XXX(模拟退火经典题)
点此看题面 大致题意: 一个平面上有\(n\)个点,每个点有1个权值,现在要选择平面上的一个点,使这\(n\)个点的权值乘上到达选定点的距离之和最小. 模拟退火 我们可以用模拟退火来做这道题. 先将\ ...
- 洛谷P1337 [JSOI2004]平衡点 / 吊打XXX(模拟退火)
传送门 先坑着,联赛活着回来的话我就写(意思就是我绝对不会写了) //minamoto #include<cstdio> #include<cmath> #include< ...
随机推荐
- redis,memcached,mongodb之间的区别
Redis Redis的优点: 支持多种数据结构,如 string(字符串). list(双向链表).dict(hash表).set(集合).zset(排序set).hyperloglog(基数估算) ...
- Redis evalsha 命令
相当于根据sha1校验码,执行缓存在服务器的一段代码. 这个命令的使用方法类似eval--参数的传入方式等等 使用需要redis版本 >= 2.6.0 语法 *> evalsha sha1 ...
- 2017 ZSTU寒假排位赛 #8
题目链接:https://vjudge.net/contest/149845#overview. A题,水题. B题,给出 p个 第一个人的区间 和 q个第二个人的区间,问[l,r]中有多少个整数满足 ...
- axios中出现两次请求,OPTIONS请求和GET请求
在项目中发现ajax中出现两次请求,OPTIONS请求和GET请求 查看到浏览器NetWork有两次请求,请求url一样: 查找原因是浏览器对简单跨域请求和复杂跨域请求的处理区别. XMLHttpRe ...
- IDEA出现Could not autowire. No beans of 'xxx' type found.解决
Plan A File → Project Structure... Facets → Spring → 右键删除即可 Plan B File → Settings → Editor → Inspec ...
- np数组转换函数
1.多维数组降为一维: a = np.arange(24) np.ravel(a)或者a.ravel a.flatten 2.数据类型转换 a = a.astype(np.float32) //tf是 ...
- antd源码分析之——标签页(tabs 3.Tabs的滚动效果)
由于ant Tabs组件结构较复杂,共分三部分叙述,本文为目录中第三部分(高亮) 目录 一.组件结构 antd代码结构 rc-ant代码结构 1.组件树状结构 2.Context使用说明 3.rc-t ...
- aop备忘
https://www.iflym.com/index.php/code/use-java-develop-compile-annotated-aspectj-programe.htmlspringb ...
- centos 如何查看命令是由哪个包提供的
yum whatprovides */ifconfig Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile ...
- 前端知识点回顾——Javascript篇(三)
数组的冒泡.选择和插入排序法 冒泡排序法(从小到大) function bubble(arr){ for(let i = 0 ;i<arr.length-1;i++){ for(let j = ...