题意:

给\(n\)个三维点,问最小覆盖球的半径。

思路:

模拟退火。

代码:

  1. #include<set>
  2. #include<map>
  3. #include<cmath>
  4. #include<queue>
  5. #include<bitset>
  6. #include<string>
  7. #include<cstdio>
  8. #include<vector>
  9. #include<cstring>
  10. #include <iostream>
  11. #include<algorithm>
  12. using namespace std;
  13. typedef long long ll;
  14. const int maxn = 1000 + 10;
  15. const ll INF = 1e18;
  16. const ll MOD = 1e9 + 7;
  17. const double t0 = 0.995;
  18. const double eps = 1e-14;
  19. double ansx, ansy, ansz, ans;
  20. struct Point{
  21. double x, y, z;
  22. }p[maxn];
  23. int n;
  24. double solve(double x, double y, double z){
  25. double ret = 0;
  26. for(int i = 1; i <= n; i++){
  27. ret = max(sqrt((p[i].x - x) * (p[i].x - x) + (p[i].y - y) * (p[i].y - y) + (p[i].z - z) * (p[i].z - z)), ret);
  28. }
  29. return ret;
  30. }
  31. void sa(){
  32. double t = 2000;
  33. double X = ansx, Y = ansy, Z = ansz;
  34. while(t > eps){
  35. double x = X + (rand() * 2 - RAND_MAX) * t;
  36. double y = Y + (rand() * 2 - RAND_MAX) * t;
  37. double z = Z + (rand() * 2 - RAND_MAX) * t;
  38. double now = solve(x, y, z);
  39. double del = now - ans;
  40. if(del < 0){
  41. X = x, Y = y, Z = z;
  42. ansx = x, ansy = y, ansz = z;
  43. ans = now;
  44. }
  45. else if(exp(-del / t) * RAND_MAX > rand()){
  46. X = x, Y = y, Z = z;
  47. }
  48. t *= t0;
  49. }
  50. }
  51. char s[maxn];
  52. int main(){
  53. srand(131313131);
  54. srand(rand());
  55. scanf("%d", &n);
  56. double x = 0, y = 0, z = 0;
  57. for(int i = 1; i <= n; i++){
  58. scanf("%lf%lf%lf", &p[i].x, &p[i].y, &p[i].z);
  59. x += p[i].x, y += p[i].y, z += p[i].z;
  60. }
  61. ansx = x / n, ansy = y / n, ansz = z / n; //平均数
  62. ans = 1e18;
  63. for(int i = 1; i <= 10; i++) sa();
  64. printf("%.10f\n", ans);
  65. return 0;
  66. }

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

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

    题意 三维空间有\(n\)个点,找到另外一个点,离所有点的最大距离最小.求这个距离. 题解 \(1\).最小球覆盖,要找的点为球心. \(2\).模拟退火. 还是补一下模拟退火的介绍吧. 模拟退火有一 ...

  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. Codeforces GYM 100876 J - Buying roads 题解

    Codeforces GYM 100876 J - Buying roads 题解 才不是因为有了图床来测试一下呢,哼( 题意 给你\(N\)个点,\(M\)条带权边的无向图,选出\(K\)条边,使得 ...

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

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

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

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

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

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

  9. 2018ICPC南京D. Country Meow

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

随机推荐

  1. 1.2V转3.3V芯片电路图,超简电路

    镍氢可充电电池1.2V转成3.3V的电路和电子产品很多,在实际适用中,即使是两节镍氢电池串联供电也是会有供电电压下降和不稳定的影响,这是因为电池电量减少,而导致电池的电压也是会随着降低. 一般情况下, ...

  2. unity3D进阶

    前言 在之前的例子中,我们都没有用到unity的精髓,例如地形系统.物理系统.粒子系统等,本文记录unity3D的进阶简单应用 前期准备 https://unity.cn/releases/full/ ...

  3. 华为交换机telnet登录时老是提醒是否更改初始密码- Warning: The initial password poses security risks

    问题:华为交换机在Telnet登录的时候总是提示初始密码不安全需要修改密码的处理方法 Warning: The initial password poses security risks   如果你输 ...

  4. 手写Netty之多路复用Select小案例

    注意:本文只是将上文多路复用器Select.Poll.Epoll区别梳理中提出的概念与Netty中的步骤联系起来,方便后面回顾,代码中注释很多,对于大家来说如果不是怀有同样的目的,不一定有用. 单线程 ...

  5. gRPC Motivation and Design Principles | gRPC https://grpc.io/blog/principles/

    gRPC Motivation and Design Principles | gRPC https://grpc.io/blog/principles/

  6. Maven环境搭建以及在IDEA中的配置与简单入门

    目录 一.下载与安装 二.配置 1. 环境变量 2. 阿里云镜像 3. 本地仓库 三.IDEA创建Maven项目 1. 创建一个原始的Maven项目 1.2 指定模板创建(可选) 2. 配置GAV 3 ...

  7. centos安装Qt

    转:http://blog.csdn.net/wavelee/article/details/7855727 在编译Qt4.8.6版本的库时,在配置时 ./configure 出现了如下的错误: Ba ...

  8. 深入理解nodejs的HTTP处理流程

    目录 简介 使用nodejs创建HTTP服务 解构request 处理Request Body 处理异常 解构response 简介 我们已经知道如何使用nodejs搭建一个HTTP服务,今天我们会详 ...

  9. CentOS 7 部署redis

    1.下载redis: 地址:http://download.redis.io/releases/: 选择需要下载的版本,然后通过ssh工具导入到centos中,这里放到了/usr/local; 解压文 ...

  10. Jenkins(1)安装

    前言 jenkins的环境搭建方法有很多,本篇使用docker快速搭建一个jenkins环境. 环境准备: mac/Linux docker docker拉去jenkins镜像 先下载jenkins镜 ...