题意

三维空间有\(n\)个点,找到另外一个点,离所有点的最大距离最小。求这个距离。

题解

\(1\)、最小球覆盖,要找的点为球心。

\(2\)、模拟退火。

还是补一下模拟退火的介绍吧。

模拟退火有一个初始温度,温度越高,接受较差的解的可能性就越大。每次走完后,都会降低温度,使得接受较差解的可能性变小。在走的过程中,更新最优解的值。

对这个题目来说,从空间中某一个点出发,如果每次都找离当前点最远的点,往那个点的方向走,大概率可以使结果变得更优。

随便设了个温度下降速率为\(0.97\),一遍就AC了。参数都不用调。

#include <bits/stdc++.h>

#define FOPI freopen("in.txt", "r", stdin)
#define FOPO freopen("out.txt", "w", stdout) using namespace std;
typedef long long LL;
const int maxn = 100 + 5;
const double eps = 1e-8;
const int inf = 0x3f3f3f3f;
const double start_T = 1000; struct Point
{
double x, y, z;
Point() {}
Point(int _x, int _y, int _z):x(_x), y(_y), z(_z) {}
}a[maxn]; double dist(Point a, Point b)
{
return sqrt((a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y) + (a.z-b.z)*(a.z-b.z));
} int n;
double SA()
{
Point p = Point(0,0,0);
int s = 0;
double ans = inf, rate = 0.97, T = start_T;
while(T > eps)
{
for (int i = 1; i <= n; i++)
if(dist(p, a[i]) > dist(p, a[s])) s = i;
double d = dist(p, a[s]);
ans = min(ans, d);
p.x += (a[s].x - p.x) * T / start_T;
p.y += (a[s].y - p.y) * T / start_T;
p.z += (a[s].z - p.z) * T / start_T;
T *= rate;
}
return ans;
} int main()
{
// FOPI;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%lf%lf%lf", &a[i].x, &a[i].y, &a[i].z);
double ans = SA();
printf("%.8f\n", ans);
}

Gym - 101981D Country Meow(模拟退火)的更多相关文章

  1. Gym - 101981D Country Meow(模拟退火)题解

    题意: 给\(n\)个三维点,问最小覆盖球的半径. 思路: 模拟退火. 代码: #include<set> #include<map> #include<cmath> ...

  2. D.Country Meow 最小球覆盖 三分套三分套三分 && 模拟退火

    // 2019.10.3 // 练习题:2018 ICPC 南京现场赛 D Country Meow 题目大意 给定空间内 N 个点,求某个点到 N 个点的距离最大值的最小值.   思路 非常裸的最小 ...

  3. Gym101981D - 2018ACM-ICPC南京现场赛D题 Country Meow

    2018ACM-ICPC南京现场赛D题-Country Meow Problem D. Country Meow Input file: standard input Output file: sta ...

  4. Country Meow

    Country Meow 和这基本一样 https://www.cnblogs.com/Fighting-sh/p/9809518.html #include<iostream> #inc ...

  5. Gym - 101981D The 2018 ICPC Asia Nanjing Regional Contest D.Country Meow 最小球覆盖

    题面 题意:给你100个三维空间里的点,让你求一个点,使得他到所有点距离最大的值最小,也就是让你找一个最小的球覆盖掉这n个点 题解:红书模板题,这题也因为数据小,精度也不高,所以也可以用随机算法,模拟 ...

  6. [gym101981D][2018ICPC南京D题]Country Meow

    题目链接 题目大意是求三维空间可以包含$n$个点的最小圆半径. 如果有做过洛谷P1337就会发现这到题很模拟退火,所以就瞎搞一发. $PS:$注意本题时限$3$秒. #include<bits/ ...

  7. Problem D. Country Meow 2018ICPC南京

    n个点求出最小圆覆盖所有点 退火算法不会,不过这题可以用三分套三分写 x轴y轴z轴各三分 #include <cstdio> #include <cstring> #inclu ...

  8. Problem D. Country Meow 题解(三分套三分套三分)

    题目链接 题目大意 给你n(n<=100)个点,要你找一个点使得和所有点距离的最大值最小值ans 题目思路 一直在想二分答案,但是不会check 这个时候就要换一下思想 三分套三分套三分坐标即可 ...

  9. 2018ICPC南京D. Country Meow

    题目: 题意:三维里有n个点,找一个最小的球将所有点覆盖. 题解:退火法模拟的一道板子题. 1 #include <stdio.h> 2 #include <iostream> ...

随机推荐

  1. phpcms如何调用某一组图里的所有图片

    {pc:get sql="select * from v9_picture_data where id = '$id'"} {loop $data $n $r} {loop str ...

  2. SQL中改变列的数据类型

    一.该列非主键.无default约束 直接更新: alter table 表名 alter column 列名 数据类型 二.该列为主键列.无default约束 (1)删除主键 alter table ...

  3. clipboard JS(剪切板)的使用

    引入js(根据路径需要修改url) <script src="lib/clipboard/clipboard.min.js" type="text/javascri ...

  4. 转---JS 获取鼠标左右键

    原文:http://blog.csdn.net/mine3333/article/details/7291557 function test() { alert(event.x+" &quo ...

  5. Second Highest Salary

    Write a SQL query to get the second highest salary from the Employee table. +----+--------+ | Id | S ...

  6. Vue.js(2.x)之插值

    看了一些友邻写的文章,不少是基于1.0版本的,有些东西在2.x版本应该已经废除了(如属性插值.单次插值在2.x版本上运行根本不执行).对于不理解的东东,找起资料来就更麻烦了.不得不老老实实线下测试并整 ...

  7. Spring Boot 的配置文件application.properties

    Spring Boot 中的application.properties 是一个全局的配置文件,放在src/main/resources 目录下或者类路径的/config下. 作为全局配置文件的app ...

  8. 【作业留存】根据IATF框架,设计的一种中小型企业安全拓扑

  9. 绿卡基础知识:I-129

    绿卡基础知识:I-129 标签: 绿卡基础知识 I-129 表格本不该你来填的.那是你老板的 business.在美国工作,除非是公民或有绿卡,都需要移民局的批准.如果你没有 EAD,I-129 就是 ...

  10. kubernetes发布解释型语言应用的最佳实践

    说明 k8s在发布编译型语言的应用时,几乎不用多考虑,就会选择将编译好jar/war包(java语言)或者二进制文件(golang/c++)直接打到镜像当中,生成新的应用镜像,然后将镜像推到镜像仓库, ...