Description

gty又虐了一场比赛,被虐的蒟蒻们决定吊打gty。gty见大势不好机智的分出了n个分身,但还是被人多势众的蒟蒻抓住了。蒟蒻们将
n个gty吊在n根绳子上,每根绳子穿过天台的一个洞。这n根绳子有一个公共的绳结x。吊好gty后蒟蒻们发现由于每个gty重力不同,绳
结x在移动。蒟蒻wangxz脑洞大开的决定计算出x最后停留处的坐标,由于他太弱了决定向你求助。
不计摩擦,不计能量损失,由于gty足够矮所以不会掉到地上。

Input

输入第一行为一个正整数n(1<=n<=10000),表示gty的数目。
接下来n行,每行三个整数xi,yi,wi,表示第i个gty的横坐标,纵坐标和重力。
对于20%的数据,gty排列成一条直线。
对于50%的数据,1<=n<=1000。
对于100%的数据,1<=n<=10000,-100000<=xi,yi<=100000

Output

输出1行两个浮点数(保留到小数点后3位),表示最终x的横、纵坐标。

Sample Input

3
0 0 1
0 2 1
1 1 1

Sample Output

0.577 1.000

HINT

思路: 这个题目是我是用模拟题退火做的,模拟退火是一个很神奇的概率算法,关键是调参数和精度误差。

主要的思路:

膜你退火就是在膜你一个退火的过程,他和爬山的区别就在于,它多了一个温度参数。

我们可以发现,越到后面,我们就越接近。

所以我们应该把修改的范围越改越小,接受较劣解的可能性也应该调小。

于是我们引入一个温度变量T,膜你退火的过程,温度逐渐下降。

下面给出模拟退火的流程:

设定初始较高的温度T

while 温度>设定的最低值

随机得到一个新解(温度越高,新解与旧解的差异越大)

更新答案

根据新解与旧解之间的优劣关系,以一定概率接受新解(越优越有可能)

以一定方式降温

endwhile

为了保证答案的质量,我们可以在最优解附近再进行随机,并更新答案

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define RD T*(2*rand()-RAND_MAX)
 4 #define gc()  getchar()
 5 #define R     register int
 6 #define rep(i,a,b) for(R i=a;i<=b;i++)
 7 #define Rep(i,a,b) for(R i=a;i>=b;i--)
 8
 9 int const N=1000+3;
10 long double const D=0.97;
11 long double const eps=1e-14;
12 long double x[N],y[N],w[N];
13 int n;
14
15 template<class T>void read(T &x){
16   x=0; char c=0; int w=0;
17   while (!isdigit(c)) w|=c=='-',c=gc();
18   while (isdigit(c)) x=x*10+(c^48),c=gc();
19   if(w) x=-x;
20 }
21 long double calc(long double vx,long double vy){
22   long double ret=0;
23   rep(i,1,n) {
24     long double dx=vx-x[i];
25     long double dy=vy-y[i];
26     long double t=sqrt(dx*dx+dy*dy);
27     ret+=t*w[i];
28   }
29   return ret;
30 }
31 int main(){
32   long double T,x0,y0,x1,y1,res,ans,best,bx=0,by=0;
33   read(n);
34   rep(i,1,n){
35     read(x[i]),read(y[i]),read(w[i]);
36     bx+=x[i]; by+=y[i];
37   }
38   srand(time(0));
39   bx/=n;by/=n;
40   best=ans=calc(bx,by);
41   int sum=1;
42   while (sum--){
43     x0=bx;y0=by; ans=best;
44     for (T =100000; T>eps;T*=D){
45       x1=x0+RD; y1=y0+RD;
46       long double tmp=calc(x1,y1);
47       if(best>tmp) best=tmp,bx=x1,by=y1;
48       if(ans>tmp ||  exp((ans-tmp)/T)>(long double)rand()/RAND_MAX)
49         ans=tmp,x0=x1,y0=y1;
50     }
51   }
52   printf("%0.3Lf %0.3Lf\n",bx,by);
53   return 0;
54 }

View Code

转载于:https://www.cnblogs.com/ZJXXCN/p/10248003.html

bzoj 3680 吊打xxx相关推荐

  1. 模拟退火(bzoj 3680: 吊打XXX)

    3680: 吊打出题人 Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special Judge Submit: 3210  Solved: 1209 [S ...

  2. [模拟退火]BZOJ 3680 吊打XXX

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

  3. BZOJ 3680 吊打XXX 模拟退火

    首先这题应该改名叫吊打出题人 题目大意:给定n个质点,求重心 这n个质点的重心满足Σ(重心到点i的距离)*g[i]最小 模拟退火的裸题 尼玛交了两篇 死活过不去 各种改参数 最后发现是我的INF不够大 ...

  4. Bzoj 3680 吊打xxx【[模拟退火】

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

  5. 【bzoj 3680】吊打XXX

    吊打XXX Time Limit: 10 Sec Memory Limit: 128 MBSec Special Judge Submit: 2715 Solved: 992 [Submit][Sta ...

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

    平衡点 / 吊打XXX solution 记录一下模拟退火的几个题目 code /*SiberianSquirrel*//*CuteKiloFish*/ #include <bits/stdc+ ...

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

    具体题目见洛谷 P1337 [JSOI2004]平衡点 / 吊打XXX 方法一:模拟退火 思路:当绳子平衡时,系统的能量最小,则此时物体总的重力势能要最小,也就是物体重量一定的情况下绳长最长,即桌子上 ...

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

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

  9. 模拟退火总结+洛谷模板题(P1337 [JSOI2004]平衡点 / 吊打XXX)

    原来就听说过模拟退火,然后一直觉得神奇,但是没有真正的去实现这个算法. 模拟退火对TSP之类的问题很实用. 1.概念:模拟退火算法(Simulate Anneal,SA)是一种通用概率演算法,用来在一 ...

最新文章

  1. 1024 程序员节 | 请对身边的程序猿好一点
  2. Hibernate关联关系映射-----双向一对多/多对一映射配置
  3. 【opencv】8.获取鼠标动作(滑轮滚动,左键按下,右键按下,鼠标移动)并进行相应处理
  4. 技术人的“匠心”:一件事竟然做了20年…
  5. python如何快速导入未安装模块_如何导入安装在sitepackages中的模块
  6. php curl 客户端,PHP易用的http客户端:curlpp
  7. 进程之间有8种通信方式
  8. 编程基本功:代码都写不好,还写什么注释
  9. 改写反话技巧_2021考研唐迟阅读技巧总结
  10. mysql oldaltertable_MySQL5.6 ALTER TABLE 分析和测试
  11. B2C多用户商城系统源码
  12. 在“动物杂交:新视野”中快速赚钱的9种方法
  13. 新浪短网址生成java_2020最新的新浪短网址(T.CN短链接)API接口分享
  14. 怎样在拼打日语汉字时,在字上同时显示假名
  15. 关于mysql安装时无法正常启动0xc000007b的问题
  16. 无屏幕有线情况下笔记本电脑连接树莓派
  17. 盘点2018程序员才懂的100个段子/搞笑图(上篇)
  18. 计算机绘图实训体会,CAD实习心得体会
  19. NI LabVIEW 2014SP1视觉开发必备软件和工具包
  20. 如何在线对图片进行压缩?

热门文章

  1. CodeDay#8:支付宝都在用的容器技术了解一下
  2. 《港诡实录》:搞恐怖和看大腿究竟哪个更重要?
  3. 《双人成行》如何炼就“教科书级别的合作体验游戏”典范?
  4. 全境封锁UI游戏设计指南
  5. 如何在 Linux 最小化安装中设置互联网
  6. 赢在CSDN——如何在CSDN赚到一桶金
  7. 【JavaScript脚本】——T1基本语法——重点笔记
  8. XMLHttpRequest对象在IE和Firefox中创建方式有没有不同?
  9. RMAN备份及恢复归档日志的语法
  10. fuser 用法简析