在二维平面上有 n 个点,第 i 个点的坐标为 (xi,yi)。请你找出一个点,使得该点到这 n个点的距离之和最小。该点可以选择在平面中的任意位置,甚至与这 n个点的位置重合。

输入格式

第一行包含一个整数 n。接下来 n行,每行包含两个整数 xi,yi,表示其中一个点的位置坐标。

输出格式

输出最小距离和,答案四舍五入取整。

数据范围

1≤n≤100,0≤xi,yi≤10000

输入样例:

4
0 0
0 10000
10000 10000
10000 0

输出样例:

28284

详解:代码注释(提前了解模拟退火算法的过程)

AC代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<utility>
#include<stdlib.h>
#include<stdio.h> using namespace std; typedef long long ll;
#define x first //给pair的两个成员起别名
#define y second
#define N 110 //最大范围
typedef pair<double, double> pdd;
int n;
pdd p[N]; //存坐标的变量
double ans = 1e9; //存答案的变量 double dist(pdd a, pdd b) //计算两点距离
{
double dx = a.x - b.x;
double dy = a.y - b.y;
return sqrt(dx*dx+dy*dy);
} double s_dist(pdd a) //将随机到的一个点与输入的点计算距离
{
double ret = 0; //存随机点的距离
for (int i = 0; i < n; i++)ret += dist(p[i], a);
ans = min(ret, ans); //与答案比较
return ret;
} double rand(int a, int b) //生成(a,b)的随机数
{
return (double)rand() / RAND_MAX * (b - a) + a;
} void th() //模拟退火
{
pdd a(rand(0, 1e4), rand(0, 1e4)); //随机一个初始点
for (double i = 1e4; i >= 1e-4; i *= 0.99) //退火 for(初始温度;最低温度;衰减因子)
{
pdd temp(rand(a.x-i,a.x+i), rand(a.y-i,a.y+i)); //新随机点
double sub = s_dist(temp) - s_dist(a); //比较两点
//sub<0时,新点较小,所以必然执行a=temp (exp(-x)>1>rand(0,1)),sub>0时可能执行a=temp
if (exp(-sub / i) > rand(0, 1))a = temp;
}
} int main()
{
cin >> n;
for (int i = 0; i < n; i++)cin >> p[i].x >> p[i].y;
for (int i = 0; i < 100; i++)th(); //进行100次模拟退火
printf("%.0f", ans);
return 0;
}

AcWing-3167. 星星还是树 -c++题解(模拟退火)的更多相关文章

  1. FJUT3574 HOME_W的附加题(带权线段树)题解

    题意: 给定n个数a1,a2,a3,……an.和m次操作. 每次操作格式如下 x y k   表示将a[x]替换为y.并求替换后,前k小的数之和 思路:我们用带权线段树维护权值,这里就是维护i的个数n ...

  2. FJUT seventh的tired树上路径(01字典树)题解

    思路(来自题解): 众所周知树上两个点xy的距离是deep[x]+deep[y]-deep[lca(x,y)]*2 然后我们把这个加减法换成异或,我们就会发现,deep[lca(x,y)]被消掉了 所 ...

  3. AcWing 247. 亚特兰蒂斯 (线段树,扫描线,离散化)

    题意:给你\(n\)个矩形,求矩形并的面积. 题解:我们建立坐标轴,然后可以对矩形的横坐标进行排序,之后可以遍历这些横坐标,这个过程可以想像成是一条线从左往右扫过x坐标轴,假如这条线是第一次扫过矩形的 ...

  4. AcWing 241.楼兰图腾 (树状数组,逆序对)

    题意:在二维坐标轴上给你一些点,求出所有由三个点构成的v和∧图案的个数. 题解:因为给出的点是按横坐标的顺序给出的,所以我们可以先遍历然后求出某个点左边比它高和低的点的个数(这个过程简直和用树状数组求 ...

  5. HDU 5919 Sequence II(主席树)题解

    题意:有A1 ~ An组成的数组,给你l r,L = min((l + ans[i - 1]) % n + 1, (r + ans[i - 1]) % n + 1),R = max((l + ans[ ...

  6. Codeforces 765F Souvenirs 线段树 + 主席树 (看题解)

    Souvenirs 我们将询问离线, 我们从左往右加元素, 如果当前的位置为 i ,用一棵线段树保存区间[x, i]的答案, 每次更新完, 遍历R位于 i 的询问更新答案. 我们先考虑最暴力的做法, ...

  7. Codeforces 311D Interval Cubing 数学 + 线段树 (看题解)

    Interval Cubing 这种数学题谁顶得住啊. 因为 (3 ^ 48) % (mod - 1)为 1 , 所以48个一个循环节, 用线段树直接维护. #include<bits/stdc ...

  8. FJUT3701 这也是一道数论题(线段树)题解

    Problem Description 好久没出数据结构题,现在赶紧来做道数据结构题热热身 小q现在要去银行,他有个很厉害的bug能看到前面排队的人.假如当前有人正在办理业务,那么肯定要等待前一个人完 ...

  9. newcoder 筱玛的迷阵探险(搜索 + 01字典树)题解

    题目描述 筱玛是个快乐的男孩子. 寒假终于到了,筱玛决定请他的朋友们一起来玩迷阵探险. 迷阵可以看做一个n×nn×n的矩阵A,每个格子上有一个有一个数Ai,j. 入口在左上角的(1,1)处,出口在右下 ...

随机推荐

  1. 详细描述一下 Elasticsearch 搜索的过程?

    想了解 ES 搜索的底层原理,不再只关注业务层面了. 解答: 搜索拆解为"query then fetch" 两个阶段. query 阶段的目的:定位到位置,但不取. 步骤拆解如下 ...

  2. 什么是线程组,为什么在 Java 中不推荐使用?

    ThreadGroup 类,可以把线程归属到某一个线程组中,线程组中可以有线程对象, 也可以有线程组,组中还可以有线程,这样的组织结构有点类似于树的形式. 为什么不推荐使用?因为使用有很多的安全隐患吧 ...

  3. requests库获取图片响应流进行转发

    遇到了一个问题,使用requests进行转发 requests响应流的时候,出现各种问题,问题的描述没有记录,不过Debug以下终于解决了问题.......下面简单的描述解决方案 response = ...

  4. css文本溢出解决方案

    1.普通单行截断省略 overflow:hidden; 文字长度超出限定宽度,则隐藏超出的内容) text-overflow:ellipsis;(设置文字在一行显示,不能换行) white-space ...

  5. Serial 与 Parallel GC 之间的不同之处?

    Serial 与 Parallel 在 GC 执行的时候都会引起 stop-the-world.它们之间主要 不同 serial 收集器是默认的复制收集器,执行 GC 的时候只有一个线程,而 para ...

  6. 关于TP框架

    TP的特性有哪些? 1.多表查询非常方便,在model中几句代码就可以完成对多表的关联操作. 2.融合了smarty模板,使前后台分离 3.支持多种缓存技术,尤其对memcache技术支持非常好 4. ...

  7. 【leetcode 29】 两数相除(中等)

    题目描述 给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 整数 ...

  8. 顺利通过EMC实验(16)

  9. HTML5 版的flappy bird

    Flappy Bird这款简单的小游戏累计下载量已经超过5000万次,每天收入至少5万美元.然而,2月10日其开发者Dong Nguyen却将Flappy Bird从苹果App Store和Googl ...

  10. 【每日日报】第三十四天---Scanner类的应用

    1 今天继续看书 Scanner类的应用 1 package File; 2 import java.util.Scanner; 3 4 public class ScannerDemo { 5 pu ...