题目大意:有$n$个重物,每个重物系在一条绳子上。所有绳子系在一起,问绳结最终平衡于何处。

题解:$NOIP$前学学模拟退火,但发现我脸好黑啊。。。

卡点:脸黑

C++ Code:

#include <cstdio>
#include <cmath>
#include <ctime>
#include <cstdlib>
#include <ctime>
#define maxn 1010
int Tim = 22;
const int __Tim = 2000;
const double eps = 1e-6, __eps = 1e-4;
const double k = 0.995, Temp = 500;
inline double abs(double a) {return a < 0 ? -a : a;}
inline double dis(double x, double y) {return sqrt(x * x + y * y);}
inline double RAND() {return static_cast<double> (rand()) / RAND_MAX;} int n;
struct point {
double x, y, w;
inline void operator += (const point &rhs) {
x += rhs.x;
y += rhs.y;
w += rhs.w;
}
inline void operator /= (const double &rhs) {
x /= rhs;
y /= rhs;
}
} s[maxn], ans; inline double calc(point &lhs) {
lhs.w = 0;
for (register int i = 1; i <= n; i++) {
lhs.w += dis(lhs.x - s[i].x, lhs.y - s[i].y) * s[i].w;
}
return lhs.w;
}
void SA() {
double T = Temp, del;
point now = ans, nxt;
while (T > eps) {
nxt.x = now.x + T * (2 * RAND() - 1);
nxt.y = now.y + T * (2 * RAND() - 1);
del = calc(nxt);
if ((del < now.w) || exp((now.w - nxt.w) / T) > RAND()) now = nxt;
if (del < ans.w) ans = nxt;
T *= k;
}
int Tim = __Tim;
now = ans;
T = __eps;
while (Tim --> 0) {
nxt.x = now.x + T * (2 * RAND() - 1);
nxt.y = now.y + T * (2 * RAND() - 1);
del = calc(nxt);
if ((del < now.w) || exp((now.w - nxt.w) / T) > RAND()) now = nxt;
if (del < ans.w) ans = nxt;
}
} int main() {
srand(20040826);
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%lf%lf%lf", &s[i].x, &s[i].y, &s[i].w);
ans += s[i];
}
ans /= n; calc(ans);
while (Tim --> 0) SA();
printf("%.3lf %.3lf\n", ans.x, ans.y);
return 0;
}

  

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

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

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

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

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

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

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

  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. visual studio 2015密钥

    Visual Studio Professional 2015简体中文版(专业版)KEY:HMGNV-WCYXV-X7G9W-YCX63-B98R2Visual Studio Enterprise 2 ...

  2. Spark-源码-SparkContext的初始化

    Spark版本 1.3SparkContext初始化流程 1.0 在我们的主类 main() 方法中经常会这么写 val conf = new SparkConf().setAppName(" ...

  3. 事物总线模式实例——EventBus实例详解

    事件总线模式是一种广泛运用于安卓开发之中的一种软件架构模式,而事件总线模式在安卓开发中最广泛的应用莫过于AndroidStudio提供的EventBus,所以我就EventBus来谈谈对事件总线模式的 ...

  4. (数据科学学习手札34)多层感知机原理详解&Python与R实现

    一.简介 机器学习分为很多个领域,其中的连接主义指的就是以神经元(neuron)为基本结构的各式各样的神经网络,规范的定义是:由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系 ...

  5. ABS(引数と同じ大きさの正の数を返す)

    ABS 関数 [数値] 数値式の絶対値を返します. 構文 ABS( numeric-expression ) パラメータ numeric-expression   絶対値が返される数値. 戻り値 数値 ...

  6. AR技术介绍(Located in Android)

    一,什么是AR 在说AR技术之前,先来说说VR. 虚拟现实(VR:Virtual Reality)是采用以计算机技术为核心的技术,生成逼真的视,听,触觉等一体化的虚拟环境,用户借助必要的设备以自然的方 ...

  7. namenode处于安全模式怎么解决?

    当我们在hdfs上操作文件的时候,有时候会报错 ,出现namenode   in   safemode namenode处于安全模式的原因: 1.NameNode发现集群中DataNode丢失达到一定 ...

  8. tomcat 异常

    Removing obsolete files from server... Could not clean server of obsolete files: null java.lang.Null ...

  9. 「日常训练」 Mike and Frog (CFR305D2C)

    题意与分析 (Codeforces 548C) 我开始以为是一条数学题,死活不知道怎么做,无奈看题解,才知这是一条暴力,思维江化了- - 题意大概是这样的: 两个东西的初始高度分别为h1,h2&quo ...

  10. MySQL统计数据库表大小

    use information_schema; SELECT TABLE_NAME, (DATA_LENGTH/1024/1024) as DataM , (INDEX_LENGTH/1024/102 ...