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

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

卡点:脸黑

C++ Code:

  1. #include <cstdio>
  2. #include <cmath>
  3. #include <ctime>
  4. #include <cstdlib>
  5. #include <ctime>
  6. #define maxn 1010
  7. int Tim = 22;
  8. const int __Tim = 2000;
  9. const double eps = 1e-6, __eps = 1e-4;
  10. const double k = 0.995, Temp = 500;
  11. inline double abs(double a) {return a < 0 ? -a : a;}
  12. inline double dis(double x, double y) {return sqrt(x * x + y * y);}
  13. inline double RAND() {return static_cast<double> (rand()) / RAND_MAX;}
  14.  
  15. int n;
  16. struct point {
  17. double x, y, w;
  18. inline void operator += (const point &rhs) {
  19. x += rhs.x;
  20. y += rhs.y;
  21. w += rhs.w;
  22. }
  23. inline void operator /= (const double &rhs) {
  24. x /= rhs;
  25. y /= rhs;
  26. }
  27. } s[maxn], ans;
  28.  
  29. inline double calc(point &lhs) {
  30. lhs.w = 0;
  31. for (register int i = 1; i <= n; i++) {
  32. lhs.w += dis(lhs.x - s[i].x, lhs.y - s[i].y) * s[i].w;
  33. }
  34. return lhs.w;
  35. }
  36. void SA() {
  37. double T = Temp, del;
  38. point now = ans, nxt;
  39. while (T > eps) {
  40. nxt.x = now.x + T * (2 * RAND() - 1);
  41. nxt.y = now.y + T * (2 * RAND() - 1);
  42. del = calc(nxt);
  43. if ((del < now.w) || exp((now.w - nxt.w) / T) > RAND()) now = nxt;
  44. if (del < ans.w) ans = nxt;
  45. T *= k;
  46. }
  47. int Tim = __Tim;
  48. now = ans;
  49. T = __eps;
  50. while (Tim --> 0) {
  51. nxt.x = now.x + T * (2 * RAND() - 1);
  52. nxt.y = now.y + T * (2 * RAND() - 1);
  53. del = calc(nxt);
  54. if ((del < now.w) || exp((now.w - nxt.w) / T) > RAND()) now = nxt;
  55. if (del < ans.w) ans = nxt;
  56. }
  57. }
  58.  
  59. int main() {
  60. srand(20040826);
  61. scanf("%d", &n);
  62. for (int i = 1; i <= n; i++) {
  63. scanf("%lf%lf%lf", &s[i].x, &s[i].y, &s[i].w);
  64. ans += s[i];
  65. }
  66. ans /= n; calc(ans);
  67. while (Tim --> 0) SA();
  68. printf("%.3lf %.3lf\n", ans.x, ans.y);
  69. return 0;
  70. }

  

[洛谷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. Scala语法(三)

    模式匹配 1)match val a = 1 val b=a match { *// a match { }返回值赋予变量 b case 1 => "red" case 2 ...

  2. 一个 mr 作业跑的比较慢,如何来优化。

    mr跑的慢可能有很多原因,如:数据倾斜.map和reduce数设置不合理.reduce等待过久.小文件过多.spill 次数过多. merge 次数过多等. 1.解决数据倾斜:数据倾斜可能是parti ...

  3. Learning Experience of Big Data: Learn to install CentOs 6.5 on my laptop

    I have learnt some experience about Big Data during my summer vocation,I was told that The first thi ...

  4. 8.1 编写USB鼠标驱动程序,并测试

    学习目标:编写USB鼠标驱动程序,并测试(将USB鼠标的左键当作L按键,将USB鼠标的右键当作S按键,中键当作回车按键). 一.怎么写USB设备驱动程序?步骤如下: 1. 首先先定义全局变量usb_d ...

  5. 函数:引用file类对象及io类对象作为参数打印文本及显示文本

    #include <iostream> #include <fstream> #include <cstdlib> using namespace std; voi ...

  6. javascript 之 为函数设置默认参数值

    方法一: function example(a,b){ var a = arguments[0] ? arguments[0] : 1;//设置参数a默认为1 var b = arguments[1] ...

  7. 1754-I Hate It 线段树(单点替换,区间最值)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  8. Maven初步接触

    最近随着搜资料,网上这样的字眼越来越多,我了解到这是构建项目的一种方式,于是准备简单看一下 首先粘几篇文章,作为学习的初步资料 Maven入门 http://blog.csdn.net/prstaxy ...

  9. ant-design 实现一个登陆窗口

    前提:已经完成项目实战(https://ant.design/docs/react/practical-projects-cn#定义-Model) 如果要想实现一个登陆窗口,首先得有一个ui,想到的是 ...

  10. ProxySQL初体验

      Preface       As we all know,it's a common sense that separate reading and writing operations can ...