codeforces106E 模拟退火
来源:互联网 发布:fgo日服石头号淘宝 编辑:程序博客网 时间:2024/06/02 02:19
找到最远点即可,每次朝那个方向退火即可。和2C还不太一样。
#include <bits/stdc++.h>using namespace std;#define all(x) x.begin(), x.end()typedef long long LL;const LL maxn = 3300;const double eps = 1e-8;double r;int n;struct Point { double x, y, z; void in() { scanf("%lf%lf%lf", &x, &y, &z); }};Point operator - (Point a, Point b) { return {a.x - b.x, a.y - b.y, a.z - b.z};}vector<Point> V;double Length2(Point a) { return a.x*a.x+a.y*a.y+a.z*a.z;}int main(){ double x, y, z, delta = 1; int best = -1; scanf("%d", &n); x = y = z = 0; for(int i = 0; i < n; i++) { Point tmp; tmp.in(); V.push_back(tmp); x += tmp.x, y += tmp.y, z += tmp.z; } x /= n, y /= n, z /= n; while(delta > eps) { double maxv = -1; int best = -1; for(int j = 0; j < n; j++) { double tt = (V[j].x-x)*(V[j].x-x)+(V[j].y-y)*(V[j].y-y)+(V[j].z-z)*(V[j].z-z); if(tt > maxv) { maxv = tt; best = j; } } delta *= 0.999; x = x + delta*(V[best].x-x); y = y + delta*(V[best].y-y); z = z + delta*(V[best].z-z); } printf("%.10f %.10f %.10f", x+eps, y+eps, z+eps); return 0;}
阅读全文
0 0
- codeforces106E 模拟退火
- 模拟退火
- 模拟退火
- 模拟退火
- 模拟退火
- 模拟退火
- 模拟退火
- 模拟退火
- 模拟退火
- 模拟退火
- 模拟退火
- 模拟退火
- 模拟退火
- 模拟退火
- 模拟退火算法
- 模拟退火算法
- 模拟退火算法
- 模拟退火,遗传算法
- FreeCodeCamp备查簿(3:#132-#160--JavaScript基础)
- 【Android笔记-1】
- NN 第二周大作业 代码
- win10的cmd如何更改consolas字体?
- 自动驾驶仿真_CAT Vehicle测试(1)——虚拟机上的ROS安装
- codeforces106E 模拟退火
- 2017.8.16. 拓展欧几里得
- 微信小程序------页面间数据控制
- eventutil 跨浏览器事件对象
- Is It A Tree?
- VS2017+Opencv3.3+win7(亲测有用)
- TCP/IP数据包格式详解-包括数据链路层的头部
- 关于Adodb.Stream 的使用说明
- 【vue报错】——listen EADDRINUSE :::8080 解决方案