题目描述

如图:有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

说明

[JSOI]

题解

这道题一开始看到觉得要向量什么的......计算几何?!qwq

对同学讲的在$\sum_{i=1}^{n}l_i*w_i$取最小值时最优也不是很能理解......

然后题解中有一种说法↓

觉得还是能强行理解的。(大概模拟退火都需要神仙思路吧qwq

然后就套模拟退火的板子就行了。

调(试)参(探)过程中感受了一下srand(19*****7)的魅力,和clock()/CLOCKS_PER_SEC的神仙用途。

//就是听说clock()很慢qwq,不知道用来优化爆搜效果好不好

然后就是代码了qwq↓

 /*
qwerta
P1337 [JSOI2004]平衡点 / 吊打XXX Accepted
100
代码 C++,1.05KB
提交时间 2018-11-01 18:28:16
耗时/内存 7005ms, 816KB
*/
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<ctime>
#include<cmath>
using namespace std;
struct emm{
int x,y,w;
}a[];
int n;
double check(double x,double y)//返回(x,y)的那个sum值
{
double now=;
for(int i=;i<=n;++i)
{
double mx=a[i].x-x,my=a[i].y-y;
now+=sqrt(mx*mx+my*my)*a[i].w;
}
return now;
}
double ansx,ansy,ans;
double t,tmin=1e-;
double deltt=0.993;
void SA()//板子
{
double x=ansx,y=ansy;
t=;//2333不给过,被改成6000就过掉了qwq
while(t>tmin)
{
double tox=x+((rand()<<)-RAND_MAX)*t;
double toy=y+((rand()<<)-RAND_MAX)*t;
double now=check(tox,toy);
double delt=now-ans;
if(delt<)
{
ans=now,ansx=tox,ansy=toy;
x=tox,y=toy;
}
else if(exp(-delt/t)*RAND_MAX>rand()){x=tox,y=toy;}
t*=deltt;
}
return;
}
int main()
{
//freopen("a.in","r",stdin);
srand();srand(rand()),srand(rand());
scanf("%d",&n);
int totx,toty;
for(int i=;i<=n;++i)
{
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].w);
totx+=a[i].x,toty=a[i].y;
}
ans=1e14+,ansx=totx/n,ansy=toty/n;//从中间开始跑
while((double)clock()/CLOCKS_PER_SEC<0.75)//如果用掉的时间还不超过0.75秒
SA();
printf("%.3f %.3f",ansx,ansy);
return ;
}

吸毒真香

「 JSOI2004」「LuoguP1337」平衡点 / 吊打XXX(模拟退火的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. 【BZOJ3680】吊打xxx [模拟退火]

    吊打XXX Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description gty又虐了一场比赛,被虐的蒟蒻 ...

随机推荐

  1. 六种基本DCDC变换器拓扑结构

    1.SEPIC电路 2.

  2. jquery瀑布流布局插件,兼容ie6不支持下拉加载,用于制作分类卡

    调用方法 $('需要布局的块').sault() 如果要在图片加载后调用需要使用$(window).load(function(fx){});函数,即等待图片加载完成再调用 3个参数 1.left:左 ...

  3. 常用string函数分析

    string函数分析string函数包含在string.c文件中,经常被C文件使用.1. strcpy函数原型: char* strcpy(char* str1,char* str2);函数功能: 把 ...

  4. C++第4次实验(提高班)—继承和派生1

    从项目2和项目3中选1题作为实验.剩下2题写成作业. [项目1 - 龙三] 请在以下程序的横线处填上适当内容,以使程序完整,并使程序的输出为: Name: 龙三 Grade: 19 #include ...

  5. 特权级概述(哥子就想知道CPU是如何验证特权级的)GATE+TSS

    [0]README text description from orange's implemention of a os . [1]特权级概述 当当前代码段试图访问一个段或者门时,目标段的DPL将会 ...

  6. 【LeetCode从零单排】No.135Candy(双向动态规划)

    1.题目 There are N children standing in a line. Each child is assigned a rating value. You are giving ...

  7. Unity编辑器扩展之RequireComponent等详解

    RequireComponent的使用: 当你添加的一个用了RequireComponent组件的脚本,需要的组件将会自动被添加到game object(游戏物体).这个可以有效的避免组装错误.举个例 ...

  8. 转载 j2ee j2se j2me 区别,mvc 和ssh联系理解

    [转]J2SE J2EE J2ME的区别 以及 MVC与SSH对应关系 2014-3-6阅读322 评论0 J2SE J2EE J2ME的区别多数编程语言都有预选编译好的类库以支持各种特定的功能,在J ...

  9. UVA - 11464 Even Parity 【暴力枚举】

    题意 给出一个 01 二维方阵 可以将里面的 0 改成1 但是 不能够 将 1 改成 0 然后这个方阵 会对应另外一个 方阵 另外一个方阵当中的元素 为 上 下 左 右 四个元素(如果存在)的和 要求 ...

  10. java 解析excle

    jjava解析excle或者csv文件并导出到web界面: 创建ExcelShower.java package com.ssm.controller; import java.io.File; im ...