bzoj3680 -- 模拟退火
2018-06-17 22:59:46来源:未知 阅读 ()
模拟退火裸题(输出"nan nan"可以AC)
代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<cstdlib> 6 using namespace std; 7 #define N 10010 8 struct Node{ 9 double x,y,z; 10 }a[N]; 11 double x,y,T=100000,Now,Ax,Ay,X,Y,N2,Min=1e17; 12 int i,j,k,n,m; 13 inline double Dist(double x,double y,Node a){ 14 return sqrt((x-a.x)*(x-a.x)+(y-a.y)*(y-a.y)); 15 } 16 inline double Calc(double X,double Y){ 17 double Ans=0; 18 for(int i=1;i<=n;i++)Ans+=Dist(X,Y,a[i])*a[i].z; 19 if(Ans<Min)Ax=X,Ay=Y,Min=Ans; 20 return Ans; 21 } 22 inline double Getrand(){ 23 return rand()%1000/1000.0; 24 } 25 inline void SA(){ 26 while(T>0.001){ 27 X=x+T*(Getrand()*2-1);Y=y+T*(Getrand()*2-1); 28 N2=Calc(x,y)-Calc(X,Y); 29 if(N2>0||exp(N2/T)>Getrand())x=X,y=Y; 30 T*=0.993; 31 } 32 for(int i=1;i<=1000;i++){ 33 X=Ax+T*(Getrand()*2-1);Y=Ay+T*(Getrand()*2-1);Calc(X,Y); 34 } 35 } 36 int main(){ 37 srand(10086); 38 scanf("%d",&n); 39 for(i=1;i<=n;i++)scanf("%lf%lf%lf",&a[i].x,&a[i].y,&a[i].z),x+=a[i].x,y+=a[i].y; 40 x/=n;y/=n; 41 SA(); 42 printf("%.3lf %.3lf\n",Ax,Ay); 43 return 0; 44 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 生产者消费者算法模拟 c++ 2020-03-29
- 【CSP-S膜你考】即时战略(模拟) 2019-10-17
- NOIP模拟day1-T1(完全背包) 2019-10-12
- Qt无边框窗体-模拟模态窗体抖动效果 2019-09-23
- day 15 2019-08-16
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash