【BZOJ1844/2210】Pku1379 Run Away 模拟退火
【BZOJ1844/2210】Pku1379 Run Away
题意:矩形区域中有一堆点,求矩形中一个位置使得它到所有点的距离的最小值最大。
题解:模拟退火的裸题,再调调调调调参就行了~
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;
const int maxn=1010;
struct pdd
{
double x,y;
pdd() {}
pdd(double a,double b) {x=a,y=b;}
}p[maxn];
int n;
double X,Y,T,mx;
pdd ans,now,neo;
double getdis(pdd a,pdd b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-')f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret*f;
}
double solve(pdd a)
{
double ret=1e10;
for(int i=1;i<=n;i++) ret=min(ret,getdis(a,p[i]));
if(ret>mx) mx=ret,ans=a;
return ret;
}
double Rand()
{
return rand()%1000/1000.0;
}
void work()
{
X=rd(),Y=rd(),n=rd();
int i,j;
for(i=1;i<=n;i++) p[i].x=rd(),p[i].y=rd();
mx=0;
for(j=1;j<=50;j++)
{
now.x=Rand()*X,now.y=Rand()*Y,solve(now),T=1000;
while(T>1e-3)
{
double a=2.0*acos(-1.0)*Rand();
neo.x=now.x+T*cos(a),neo.y=now.y+T*sin(a),T*=0.95;
if(neo.x<0||neo.x>X||neo.y<0||neo.y>Y) continue;
double de=solve(neo)-solve(now);
if(de>0) now=neo;
}
T=0.5;
for(i=1;i<=500;i++)
{
double a=2.0*acos(-1.0)*Rand();
neo.x=now.x+T*cos(a);
neo.y=now.y+T*sin(a);
if(neo.x<0||neo.x>X||neo.y<0||neo.y>Y) continue;
solve(neo);
}
}
printf("The safest point is (%.1lf, %.1lf).\n",ans.x,ans.y);
}
int main()
{
srand(2333666);
int T=rd();
while(T--) work();
}
【BZOJ1844/2210】Pku1379 Run Away 模拟退火的更多相关文章
- poj-1379 Run Away(模拟退火算法)
题目链接: Run Away Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 7982 Accepted: 2391 De ...
- Run Away 模拟退火
Run Away Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Sta ...
- PKU 1379 Run Away(模拟退火算法)
题目大意:原题链接 给出指定的区域,以及平面内的点集,求出一个该区域内一个点的坐标到点集中所有点的最小距离最大. 解题思路:一开始想到用随机化算法解决,但是不知道如何实现.最后看了题解才知道原来是要用 ...
- poj 1379 Run Away 模拟退火 难度:1
Run Away Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 6482 Accepted: 1993 Descript ...
- POJ.1379.Run Away(模拟退火)
题目链接 POJ输出不能用%lf! mmp从4:30改到6:00,把4:30交的一改输出也过了. 于是就有了两份代码.. //392K 500MS //用两点构成的矩形更新,就不需要管边界了 #inc ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 一文搞懂GitLab安装部署及服务配置
GitLab安装部署 Git,GitHub,GitLab,这三个东东长得好像呀,都是个啥? Git是Linus Torvalds(如果不知道这位大神是谁,请出门左转,慢走不送~)为了帮助管理Linux ...
- POJ 1379 Run Away 【基础模拟退火】
题意:找出一点,距离所有所有点的最短距离最大 二维平面内模拟退火即可,同样这题用最小圆覆盖也是可以的. Source Code: //#pragma comment(linker, "/ST ...
- 模拟退火算法(run away poj1379)
http://poj.org/problem?id=1379 Run Away Time Limit: 3000MS Memory Limit: 65536K Total Submissions: ...
随机推荐
- 第一次用写一个3d轮播
2016-07-11gallery 3d html <!doctype html><html lang="en"><head> <met ...
- AC日记——猴子 cogs 2043
2043. 猴子 ★★ 输入文件:monkeya.in 输出文件:monkeya.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] 有n只猴子,第一只尾巴挂在树上 ...
- 问题:Linux 输入任何命令都显示 -bash: fork: Cannot allocate memory
应该是某个程序吃掉了所有的内存,只能重启
- js-控制浏览器和移动端的后退按钮 . popstate
//控制浏览器和移动端的后退按钮 if (window.history && window.history.pushState) { $(window).on('popstate', ...
- (1)TensorFlow 概要
TensorFlow:翻译成中文 张量流 计算图:又被称为有向图.数据流图 数据流图用结点和线的有向图来描述数学计算,节点一般用来表示施加的数学操作,也可以用来数据输入起点.输出终点,或者读取写入持久 ...
- [转载][FPGA]Quartus代码保护-生成网表文件
0. 简介 当项目过程中,不想给甲方源码时,该如何?我们可以用网表文件qxp或者vqm对资源进行保护. 下面讲解这两个文件的具体生成步骤: 1. 基本概念 QuartusII的qxp文件为Quartu ...
- ARC下循环引用的问题
最初 最近在开发应用时碰到使用ASIHttpRequest后在某些机器上发不出请求的问题,项目开启了ARC,代码是这样写的: @implement MainController - (void) fe ...
- 邁向IT專家成功之路的三十則鐵律 鐵律二十五:IT人屈辱之道-十倍奉還
現代人普遍火氣都很大,與人爭論時只要有一點點感到屈辱,便會開始大聲反擊,甚至於暴力相向.至於企業中的人事相鬥,則是典型的來個明爭暗鬥,直到成為老闆眼中的紅人,在逐漸掌握了權力之後再來個內部大清洗,不久 ...
- 【bootstrap】Bootstrap Notify的使用步骤
Bootstrap Notify说明文档:http://bootstrap-notify.remabledesigns.com/ Bootstrap Notify的GitHub地址:https://g ...
- 如何使用ssh远程编辑定时任务crontab?
linxu定时任务使用crontab,编辑crontab可以直接编辑:crontab -e:也可以直接读取文件 crontab file.这两种操作都不需要特殊权限sudo.区别在于,crontab ...