bzoj3680 -- 模拟退火
来源:互联网 发布:淘宝 台湾省 编辑:程序博客网 时间:2024/05/22 14:00
模拟退火裸题(输出"nan nan"可以AC)bzoj3680
代码:
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 }
阅读全文
0 0
- bzoj3680 -- 模拟退火
- [BZOJ3680]吊打XXX && 模拟退火
- 【bzoj3680】【吊打XXX】【模拟退火】
- 【BZOJ3680】吊打XXX 广义费马点 模拟退火
- BZOJ3680 吊打XXX(模拟退火算法)
- [bzoj3680] 吊打XXX:模拟退火 or 模拟力学情景
- 【模拟退火\爬山算法】[HYSBZ/BZOJ3680]吊打XXX(吊打GTY)
- 【BZOJ3680】吊打XXX 计算几何 广义费马点+模拟退火(爬山算法)
- 模拟退火
- 模拟退火
- 模拟退火
- 模拟退火
- 模拟退火
- 模拟退火
- 模拟退火
- 模拟退火
- 模拟退火
- 模拟退火
- bzoj3732 -- 最小生成树+倍增
- bzoj1013 [ JSOI2008 ] -- 高斯消元
- jquery实现点击缩略图在弹出层显示原图功能
- bzoj3527 -- FFT
- bzoj4500 -- 差分约束
- bzoj3680 -- 模拟退火
- bzoj2428 [ HAOI2006 ] -- 模拟退火
- bzoj1038 [ ZJOI2008 ] -- 模拟退火+二分
- bzoj3874 [ AHOI2014 ] -- 爬山算法
- bzoj2209 [ JSOI2011 ] -- splay
- bzoj2957 -- 线段树
- [Oracle]行列转换(行合并与拆分)
- bzoj4807 -- 组合数
- RT-Thread 升级时起始运行地址不是0x08000000