POJ 1379 (随机算法)模拟退火
题目大意:
给定一堆点,找到一个点的位置使这个点到所有点中的最小距离最大
这里数据范围很小,精度要求也不高,我们这里可以利用模拟退火的方法,随机找到下一个点,如果下一个点比当前点优秀就更新当前点
参考:http://www.cnblogs.com/heaad/archive/2010/12/20/1911614.html
http://wenku.baidu.com/view/0c6b5df5f61fb7360b4c65a9.html
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <climits>
#include <cmath>
#include <queue>
#include <cstdlib>
#include <ctime>
using namespace std;
#define random(x) ((rand()%x)+1)
#define N 1005
#define ll long long
#define eps 1e-4
const double PI = acos(-1.0);
const int INF = INT_MAX;
const int P = ;
const int L = ; double x,y;
int n;
double dist[N]; struct Point{
double x,y;
Point(double x= , double y=):x(x),y(y){}
}p[N] , tmp[N]; double dis(Point a , Point b)
{
double x = a.x-b.x , y = a.y - b.y;
return sqrt(x*x+y*y);
} double min_dis(Point t)
{
double minn = 1e20;
for(int i= ; i<n ; i++) minn=min(minn , dis(t , p[i]));
return minn;
} bool ok(Point t)
{
return t.x>= && t.x<=x && t.y>= && t.y<=y;
} int main()
{
#ifndef ONLINE_JUDGE
freopen("a.in" , "r" , stdin);
#endif // ONLINE_JUDGE
srand(time());
int T;
scanf("%d" , &T);
while(T--)
{
Point ans;
double ret=; scanf("%lf%lf%d" , &x , &y , &n);
for(int i= ; i<n ; i++){
scanf("%lf%lf" , &p[i].x , &p[i].y);
} for(int i= ; i<P ; i++){
tmp[i].x = random()/1000.0*x;
tmp[i].y = random()/1000.0*y;
dist[i] = min_dis(tmp[i]);
}
double step = sqrt(x*x+y*y)/;
while(step>eps){ for(int i= ; i<P ; i++){
Point cur;
for(int j= ; j<L ; j++){
double ang = random()/1000.0**PI;
cur.x = tmp[i].x+cos(ang)*step;
cur.y = tmp[i].y+sin(ang)*step;
if(!ok(cur)) continue;
double val = min_dis(cur);
if(val>dist[i]){
tmp[i]=cur;
dist[i] = val;
}
}
}
step *= 0.85;
} for(int i= ; i<P ; i++){
if(dist[i]>ret){
ret = dist[i];
ans = tmp[i];
}
}
printf("The safest point is (%.1f, %.1f).\n" , ans.x , ans.y);
}
return ;
}
POJ 1379 (随机算法)模拟退火的更多相关文章
- POJ.1379.Run Away(模拟退火)
题目链接 POJ输出不能用%lf! mmp从4:30改到6:00,把4:30交的一改输出也过了. 于是就有了两份代码.. //392K 500MS //用两点构成的矩形更新,就不需要管边界了 #inc ...
- poj 1379 Run Away 模拟退火 难度:1
Run Away Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 6482 Accepted: 1993 Descript ...
- POJ 3318:Matrix Multiplication(随机算法)
http://poj.org/problem?id=3318 题意:问A和B两个矩阵相乘能否等于C. 思路:题目明确说出(n^3)的算法不能过,但是通过各种常数优化还是能过的. 这里的随机算法指的是随 ...
- POJ 3318 Matrix Multiplication(随机算法)
题目链接 随机算法使劲水...srand((unsigned)time(0))比srand(NULL)靠谱很多,可能是更加随机. #include <cstdio> #include &l ...
- poj 2069 Super Star —— 模拟退火
题目:http://poj.org/problem?id=2069 仍是随机地模拟退火,然而却WA了: 看看网上的题解,都是另一种做法——向距离最远的点靠近: 于是也改成那样,竟然真的A了...感觉这 ...
- 随机算法 - Miller_Rabin pollard_rho
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<time.h> #in ...
- 微信红包中使用的技术:AA收款+随机算法
除夕夜你领到红包了吗?有的说“我领了好几K!”“我领了几W!” 土豪何其多,苦逼也不少!有的说“我出来工作了,没压岁钱了,还要发红包”.那您有去抢微信红包吗?微信群中抢“新年红包”春节爆红.618微信 ...
- 抽奖随机算法的技术探讨与C#实现
一.模拟客户需求 1.1 客户A需求:要求每次都按照下图的概率随机,数量不限,每个用户只能抽一次,抽奖结果的分布与抽奖概率近似. 1.2 客户B需求:固定奖项10个,抽奖次数不限,每个用户只能抽一次, ...
- hdu 4712 (随机算法)
第一次听说随机算法,在给的n组数据间随机取两个组比较,当随机次数达到一定量时,答案就出来了. #include<stdio.h> #include<stdlib.h> #inc ...
- 权重随机算法的java实现
一.概述 平时,经常会遇到权重随机算法,从不同权重的N个元素中随机选择一个,并使得总体选择结果是按照权重分布的.如广告投放.负载均衡等. 如有4个元素A.B.C.D,权重分别为1.2.3.4,随机结果 ...
随机推荐
- KEIL软件仿真死在等待外部晶振起振
这是由于是Debug里面的设置有问题 主要是下面2项设置 Dialog DLL默认是DCM3.DLL Parameter默认是-pCM3 应改为 Dialog DLL默认是DARMSTM.DLL Pa ...
- Ionic之页面传值
很多时候,我们都进入一个页面往往都是需要将上一级的数据转入到下一级页面中使用,在传传统的html中时经过url来传值,所以ionic也是沿用了html中的方法. 但是还是有点区别于html.我们直接在 ...
- H5图片预览功能
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- java设计模式之单例设计模式
单例设计模式 保证一个类在使用过程中,只有一个实例.优势就是他的作用,这个类永远只有一个实例. 优势:这个类永远只有一个实例,占用内存少,有利于Java垃圾回收. 单例设计模式关键点 私有的构造方法. ...
- css3 blur模糊解决ie6-ie9兼容
css3 blur模糊是css3的新特性,但是不兼容ie6-ie9,以下代码可以解决此问题: filter: progid:DXImageTransform.Microsoft.Blur(Pixel ...
- gp服务输出的结果文件输出到绝对路径
gp服务跟本地用arcmap执行gp有个不同,就是输出的文件一般只能输出到arcgis server默认的output目录里面(arcgis server有此限制,无论怎么配还是写到output目录里 ...
- SQL Server2012 T-SQL对分页的增强尝试
简介 SQL Server 2012中在Order By子句之后新增了OFFSET和FETCH子句来限制输出的行数从而达到了分页效果.相比较SQL Server 2005/2008的ROW_Numbe ...
- VBA 连接sql server的用法
cnnstr = "Provider=sqloledb;Data Source=192.211.21.8;Initial Catalog=pub;UID=账号;PWD=密码" VB ...
- 微软将于12月起开始推送Windows 10 Mobile
[环球科技报道 记者 陈薇]据瘾科技网站10月8日消息,根据微软Lumia官方Faceboo发布的消息,新版系统Windows 10 Mobile 将会12月起陆续开始推送. 推送的具体时程根据地区. ...
- 在proe模型文件里面存储用户数据
存储外部数据 author:visualsan 2014.2 上海 1.简介 利用外部数据存储外部接口,可以在模型文件里面尺寸用户自定义数据.在模型保存时数据自动存储,在模型载入时数据自动载入.外部数 ...