ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-10-04 19:02:15  阅读:230  来源: 互联网

标签:RAND rand Meow Country int double now MAX gym101981D


题目链接

题目大意是求三维空间可以包含$n$个点的最小圆半径。

如果有做过洛谷P1337就会发现这到题很模拟退火,所以就瞎搞一发。

$PS:$注意本题时限$3$秒。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int maxn = 2111;
 5 struct node {
 6     double x, y, z;
 7 }a[maxn];
 8 int n;
 9 double ansx, ansy, ansz, ans;
10 double dis(double x, double y, double z, node w) {
11     return sqrt((x - w.x) * (x - w.x) + (y - w.y) * (y - w.y) + (z - w.z) * (z - w.z));
12 }
13 double solve(double x, double y, double z) {
14     double w = 0;
15     for (int i = 1; i <= n; i++)
16         w = max(w, dis(x, y, z, a[i]));
17     return w;
18 }
19 const double delta = 0.998;
20 void SA() {
21     double X = ansx, Y = ansy, Z = ansz;
22     double t = 1999;
23     while (t > 1e-14) {
24         double x = X + (rand() * 2 - RAND_MAX) * t;
25         double y = Y + (rand() * 2 - RAND_MAX) * t;
26         double z = Z + (rand() * 2 - RAND_MAX) * t;
27         double now = solve(x, y, z);
28         double D = now - ans;
29         if (D < 0) {
30             X = x, Y = y, Z = z;
31             ansx = X, ansy = Y;
32             ansz = Z;
33             ans = now;
34         }
35         else if (exp(-D / t) * RAND_MAX > rand())X = x, Y = y, Z = z;
36         t *= delta;
37     }
38 }
39 int main() {
40     srand(unsigned(time(NULL)));
41     scanf("%d", &n);
42     for (int i = 1; i <= n; i++) {
43         scanf("%lf%lf%lf", &a[i].x, &a[i].y, &a[i].z);
44         ansx += a[i].x, ansy += a[i].y, ansz += a[i].z;
45     }
46     ansx /= n, ansy /= n, ansz /= n;
47     ans = solve(ansx, ansy, ansz);
48     while ((double)clock() / CLOCKS_PER_SEC < 2.7)
49         SA();
50     printf("%.10f", ans);
51 }

 

标签:RAND,rand,Meow,Country,int,double,now,MAX,gym101981D
来源: https://www.cnblogs.com/sainsist/p/11622860.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有