POJ 1379 Run Away
2016-05-27 21:25
423 查看
题意:有n个陷阱,在X,Y范围内要求出一个点使得这个点到陷阱的最小距离最大。
思路:模拟退火,随机撒入40个点,然后模拟退火随机化移动。
(这题poj坑爹,加了srand(time(NULL))不能交G++,不加srand(time(NULL))又会WA,交了C++不能用acos(-1),只能用3.1415926代替,真是坑爹。)
思路:模拟退火,随机撒入40个点,然后模拟退火随机化移动。
(这题poj坑爹,加了srand(time(NULL))不能交G++,不加srand(time(NULL))又会WA,交了C++不能用acos(-1),只能用3.1415926代替,真是坑爹。)
#include<algorithm> #include<cstdio> #include<cmath> #include<cstring> #include<iostream> #include<time.h> #define N 10005 const double eps=1e-3; const double Pi=3.1415926;//acos(-1)! struct Point{ double x,y; Point(){} Point(double x0,double y0):x(x0),y(y0){} }p ,q ; double d ; int X,Y,n; double dis(Point p1){ return p1.x*p1.x+p1.y*p1.y; } double dist(Point p1,Point p2){ return sqrt(dis(Point(p1.x-p2.x,p1.y-p2.y))); } int main(){ srand(time(NULL)); int T; scanf("%d",&T); while (T--){ scanf("%d%d%d",&X,&Y,&n); for (int i=1;i<=n;i++) scanf("%lf%lf",&p[i].x,&p[i].y); for (int i=1;i<=40;i++){ q[i].x=(double)((double)((rand()%1000+1)))/1000.0*X; q[i].y=(double)((double)((rand()%1000+1)))/1000.0*Y; d[i]=1e20; for (int j=1;j<=n;j++) d[i]=std::min(d[i],dist(q[i],p[j])); } double kt=(double)((double)(std::max(X,Y)))/sqrt(1.0*n); while (kt>eps){ for (int i=1;i<=40;i++){ double qx=q[i].x,qy=q[i].y; for (int j=1;j<=40;j++){ double theta=double(((double)(rand()%1000+1))/1000.0)*10*Pi; double dx=kt*cos(theta); double dy=kt*sin(theta); double tx=qx+dx,ty=qy+dy; if (tx<0||tx>X||ty<0||ty>Y) continue; double td=1e20; for (int k=1;k<=n;k++) td=std::min(td,dist(Point(tx,ty),p[k])); if (td>d[i]){ d[i]=td; q[i]=Point(tx,ty); } } } kt*=0.8; } double ans=0; Point Ans; for (int i=1;i<=40;i++) if (ans<d[i]){ ans=d[i]; Ans=q[i]; } printf("The safest point is (%.1lf, %.1lf).\n",Ans.x,Ans.y); } }
相关文章推荐
- C#调用WebService获取天气信息
- Dog_Hybird的诞生
- 集合总结
- 《人生》续集
- Codeforces Round #225 (Div. 1) C-Propagating tree (DFS序+线段树/树状数组)
- ACM--移动桌子--贪心--HDOJ 1050--Moving Tables
- css的小技巧
- linux基本命令(40)——wc命令
- Codeforces Round#333 div.1 E A Museum Robbery
- 基因数据处理26之bcftools安装和使用
- poj 1411 Calling Extraterrestrial Intelligence Again(超时)
- 个人工作总结01(第二次冲刺)
- 文件的下载(通过NSURLConnection代理)
- 深入学习java集合:ArrayList<E>实现
- HDFS学习之FileSystem
- 阅读《构建之法》第8、9、10章
- JavaScript笔记(4)作用域与作用域链
- Git安装及常用命令简介
- 唐巧大神的转场详解
- longest-common-prefix 求字符串数组的最长公共前缀