题目描述

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

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

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

输入输出格式

输入格式:

文件的第一行为一个正整数n(1≤n≤1000),表示重物和洞的数目。接下来的n行,每行是3个整数:Xi.Yi.Wi,分别表示第i个洞的坐标以及第 i个重物的重量。(-10000≤x,y≤10000, 0<w≤1000 )

输出格式:

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

输入输出样例

输入样例 1:

3

0 0 1

0 2 1

1 1 1

输出样例 1:

0.577 1.000

数据范围

1≤n≤1000

-10000≤x,y≤10000, 0<w≤1000

Solution

首先看看这个题目(貌似像物理题)。

当x点确定时,所有重物的重力势能之和最小,由于所有的绳子是一样长的,所以重的物体离地面要近一些,必须使得桌面上的那一截绳子最短,也就是离x点越近。

那么我们不难列出这个式子:



其中dist为点到x的距离,weight为点上物体的重量

当上述式子最小时,即为答案x。

贴代码

#include<bits/stdc++.h>
using namespace std;
const int Maxn=1005;
struct Lemon
{
int x,y,m;
}point[Maxn];
int n;
double ansx,ansy;
void read()
{
int allx=0,ally=0;
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%d%d%d",&point[i].x,&point[i].y,&point[i].m);
allx+=point[i].x;
ally+=point[i].y;
}
ansx=double(allx)/double(n);
ansy=double(ally)/double(n);
return ;
}
double get(double x,double y)
{
double sum=0;
for(int i=1;i<=n;i++)
{
double lex=point[i].x-x;
double ley=point[i].y-y;
sum+=sqrt(lex*lex+ley*ley)*point[i].m;
}
return sum;
}
double ans=1000000000000009,t;//ans不要开太小,被这个坑了好久
const double delta=0.9969;
void fire()
{
double menx=ansx;
double meny=ansy;
t=1218.0;
while(t>1e-14)
{
double xtemp=ansx+(rand()*2-RAND_MAX)*t;
double ytemp=ansy+(rand()*2-RAND_MAX)*t;
double newans=get(xtemp,ytemp);
double DE=newans-ans;
if(DE<0)
{
menx=xtemp;
meny=ytemp;
ansx=xtemp;
ansy=ytemp;
ans=newans;
}
else if(exp(-DE/t)*RAND_MAX>rand())
{
menx=xtemp;
meny=ytemp;
}
t*=delta;
}
}
int main()
{
read();
fire();
fire();
fire();
fire();
printf("%.3lf %.3lf",ansx,ansy);
return 0;
}

JSOI2004 平衡点 / 吊打XXX的更多相关文章

  1. 洛谷 P1337 [JSOI2004]平衡点 / 吊打XXX 解题报告

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

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

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

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

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

  4. [luogu1337][bzoj3680][JSOI2004]平衡点 / 吊打XXX【模拟退火】

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

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

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

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

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

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

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

  8. LG1337 [JSOI2004]平衡点 / 吊打XXX 模拟退火

    问题描述 LG1337 题解 模拟退火模板 记住概率公式: \(exp(\frac{dealt}{T}) \times rand \ge R_A^ND^M_AX\) zzk太欧了,我交了一版没过他来了 ...

  9. [BZOJ3680][JSOI2004]平衡点 / 吊打XXX

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

  10. 题解:[JSOI2004]平衡点 / 吊打XXX

    这个题目算是一个模拟退火的板子题 物重一定,绳子越短,重物越低,势能越小,势能又与物重成正比 使得$\sum_{i=1}^nd[i]*w[i]$也就是总的重力势能最小,可以使得系统平衡 交了两面半.. ...

随机推荐

  1. POJ 3468:A Simple Problem with Integers(线段树[成段更新])

    题意:N个数Q次操作.一共两种操作:Q l r :询问[l,r]这个区间里的数字和,C l r c: [l,r]区间里的每个数都加上c.1 ≤ N,Q ≤ 100000. 方法:线段树的成段更新.注意 ...

  2. 关于xcode 9.0数组问题的遇到的坑

    1.最近一直在忙着做项目,今天就来总结最近这段时间遇到的一些比较麻烦的问题.有时候也是颇感无奈. 有句话说的好.人不要总在一棵树上吊死.去旁边那棵树上也可以试试.好了不扯了.直接进入正题吧! 先来阐述 ...

  3. Hibernate游记——装备篇《一》(基础配置详解)

    Hibernate配置文件可以有两种格式,一种是 hibernate.properties ,另一种是 hibernate.cfg.xml 后者稍微方便一些,当增加hbm映射文件的时候,可以直接在 h ...

  4. react-native 适配问题

    const ScreenWidth = Dimensions.get('window').width; static DimensionsTransform(px) { // 设计图纸以750为基准 ...

  5. indexOf()、includes()、startsWith()、endsWith()

    是否包含字符串三种新方法 传统上,JavaScript只有 indexOf 方法,可以用来确定一个字符串是否包含在另一个字符串中.ES6又提供了三种新方法. includes():返回布尔值,表示是否 ...

  6. BZOJ 3309 莫比乌斯反演

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=3309 题意:定义f(n)为n所含质因子的最大幂指数,求 $Ans=\sum _{i=1} ...

  7. Linux 性能优化解析

    前情概述 进程调度 老板 cpu 任劳任怨的打工仔 线程 工作在做什么 可运行队列 拥有的工作清单 上下文切换 和老板沟通以便得到老板的想法并及时调整自己的工作 中断 部分工作做完以后还需要及时向老板 ...

  8. null相关

    本文转自:http://www.cnblogs.com/peida/archive/2013/06/14/Guava_Optional.html null代表不确定的对象: Java中,null是一个 ...

  9. 求lca(模板)

    洛谷——P3379 [模板]最近公共祖先(LCA) 题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点 ...

  10. ML | SVM

    What's xxx An SVM model is a representation of the examples as points in space, mapped so that the e ...