P1337 [JSOI2004]平衡点 / 吊打XXX

题目描述

有 \(n\) 个重物,每个重物系在一条足够长的绳子上。每条绳子自上而下穿过桌面上的洞,然后系在一起。\(X\)处就是公共的绳结。假设绳子是完全弹性的(不会造成能量损失),桌子足够高(因而重物不会垂到地上),且忽略所有的摩擦。

问绳结 \(X\) 最终平衡于何处。

注意:桌面上的洞都比绳结 \(X\) 小得多,所以即使某个重物特别重,绳结 \(X\) 也不可能穿过桌面上的洞掉下来,最多是卡在某个洞口处。

输入输出格式

输入格式:

文件的第一行为一个正整数\(n(1≤n≤1000)\),表示重物和洞的数目。

接下来的 \(n\) 行,每行是3个整数:\(X_i,Y_i,W_i\),分别表示第\(i\)个洞的坐标以及第\(i\)个重物的重量。\((-10000≤x,y≤10000, 0<w≤1000)\)

输出格式:

你的程序必须输出两个浮点数(保留小数点后三位),分别表示处于最终平衡状态时绳结 \(X\) 的横坐标和纵坐标。两个数以一个空格隔开。


搞一个位置,然后模拟退火

注意一下

关于随机移动位置的相对大小,和温度相关

跳出去的概率为\(e^{\frac{-\Delta E}{T}}>k\),\(k\)是\((0,1)\)之间随机的


Code:

#include <cstdio>
#include <ctime>
#include <cmath>
#include <cstdlib>
const int N=1010;
double dx[N],dy[N],w[N];
int n;
double cal(double x,double y)
{
double ret=0;
for(int i=1;i<=n;i++) ret+=sqrt((dx[i]-x)*(dx[i]-x)+(dy[i]-y)*(dy[i]-y))*w[i];
return ret;
}
double ans,ansx,ansy,delta=0.997;
void SA()
{
double T=2333;
while(T>1e-12)
{
double tx=ansx+(rand()*2-RAND_MAX)*T;
double ty=ansy+(rand()*2-RAND_MAX)*T;
double E=cal(tx,ty);
if(E<ans) ansx=tx,ansy=ty,ans=E;
else if(exp((ans-E)/T)*RAND_MAX>rand()) ansx=tx,ansy=ty;
T*=delta;
}
}
int main()
{
srand(time(0)^2333333^998244854);
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%lf%lf%lf",dx+i,dy+i,w+i),ansx+=dx[i],ansy+=dy[i];
ansx=ansx/n,ansy=ansy/n,ans=cal(ansx,ansy);
SA(),SA(),SA(),SA(),SA(),SA(),SA(),SA();
printf("%.3lf %.3lf\n",ansx,ansy);
return 0;
}

2019.2.17

洛谷 P1337 [JSOI2004]平衡点 / 吊打XXX 解题报告的更多相关文章

  1. 洛谷 P1337 [JSOI2004]平衡点 / 吊打XXX

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

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

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

  3. [洛谷P1337][JSOI2004]平衡点 / 吊打XXX

    题目大意:有$n$个重物,每个重物系在一条绳子上.所有绳子系在一起,问绳结最终平衡于何处. 题解:$NOIP$前学学模拟退火,但发现我脸好黑啊... 卡点:脸黑 C++ Code: #include ...

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

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

  5. P1337 [JSOI2004]平衡点 / 吊打XXX 模拟退火

    链接 https://www.luogu.org/problemnew/show/P1337 思路 交了好多发,都是wrong 初始值取平均数就1A了 真的是玄学的算法 代码 // luogu-jud ...

  6. P1337 [JSOI2004]平衡点 / 吊打XXX

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

  7. Luogu P1337 [JSOI2004]平衡点 / 吊打XXX

    一道入门模拟退火的经典题,还是很考验RP的 首先我们发现神TM这道题又和物理扯上了关系,其实是一道求广义费马点的题目 首先我们可以根据物理知识得到,当系统处于平衡状态时,系统的总能量最小 又此时系统的 ...

  8. LUOGU P1337 [JSOI2004]平衡点 / 吊打XXX(模拟退火)

    传送门 解题思路 学习了一下玄学算法--模拟退火,首先要求平衡处,也就是求势能最小的地方,就是求这个点到所有点的距离*重量最小.剩下的几乎是模拟退火的板子了. #include<iostream ...

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

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

随机推荐

  1. Redis对象占用内存分析

    当你往Redis中插入了一系统对象,如何分析这些对象的占用情况? 1.我们可以在Redis的控制台使用info命令来查看各项指标,其中有一项是Memory,可以通过存储前后的used_memory差异 ...

  2. 基于uFUN开发板和扩展板的联网校准时钟

    项目概述 上周在uFUN试用群里看到管理员说试用活动快结束了,要抓紧完成评测总结,看大家的评测总结也都写了,我也不能落后啊!正好最近做的扩展板到手了,于是赶紧进行调试,做了一个不用校准的时钟,时钟这种 ...

  3. KVM虚拟机管理——虚拟机克隆

    1. 概述2. 部署基本操作系统虚拟机3. 配置虚拟机3.1 修改/etc/sysconfig/network3.2 删除/etc/sysconfig/network-scripts/ifcfg-et ...

  4. Mysqldump备份说明及数据库备份脚本分享-运维笔记

    MySQLdump是MySQL自带的导出数据工具,即mysql数据库中备份工具,用于将MySQL服务器中的数据库以标准的sql语言的方式导出,并保存到文件中.Mysqldump是一个客户端逻辑备份的工 ...

  5. linux下日志文件error监控报警脚本分享

    即对日志文件中的error进行监控,当日志文件中出现error关键字时,即可报警!(grep -i error 不区分大小写进行搜索"error"关键字,但是会将包含error大小 ...

  6. github的使用心得

    我的github地址:https://github.com/gaino1/test GitHub 是一个用于使用Git版本控制系统的项目的基于互联网的存取服务. GitHub可以托管各种git库,并提 ...

  7. 结对项目 https://github.com/quchengyu/jiedui/tree/quchengyu-patch-1

    所选项目名称:文本替换      结对人:傅艺伟 github地址 : https://github.com/quchengyu/jiedui/tree/quchengyu-patch-1 用一个新字 ...

  8. mybatis集成redis

    系统原生集成的Ehcache, 但是监控需要(version 2.7),Ehcache Monitor http://www.ehcache.org/documentation/2.7/operati ...

  9. jstack 使用一例

    31jstack -m -F 2340 >libra.log 2>&1 jstack -m -F 2340 >libra2.log 2&>1 jstack -m ...

  10. springframework内BeanUtils源码使用记录一

    package org.springframework.beans; public abstract class BeanUtils /** * Copy the property values of ...