3148 松鼠聚会

有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点,距离为1。现在N个松鼠要走到一个松鼠家去,求走过的最短距离和。

输入

第一行给出数字N,表示有多少只小松鼠。0<=N<=10^5
下面N行,每行给出x,y表示其家的坐标。
-10^9<=x,y<=10^9

输出

表示为了聚会走的路程和最小为多少

输入样例

输入样例1:
6
-4 -1
-1 -2
2 -4
0 2
0 3
5 -2
输入样例2:
6
0 0
2 0
-5 -2
2 -2
-1 2
4 0

输出样例

输出样例1:
20
输出样例2:
15

解析:

很明显的单峰函数,可以使用爬山解决。

本题算法流程:

1、 初始化球心为各个给定点的重心(即其各维坐标均为所有给定点对应维度坐标的平均值),以减少枚举量。 设定一个爬山算法的温度初始值,开始进行下面的循环过程。

2、 对于当前的球心,求出每个已知点到这个球心欧氏距离的平均值。

3、 遍历所有已知点。记录一个改变值 cans(分开每一维度记录)对于每一个点的欧氏距离,如果大于平均值,就把改变值加上差值,否则减去。实际上并不用判断这个大小问题,只要不考虑绝对值,直接用坐标计算即可。这个过程可以形象地转化成一个新的球心,在空间里推来推去,碰到太远的点就往点的方向拉一点,碰到太近的点就往点的反方向推一点。

4、 将我们记录的 cans 乘上温度,更新球心,回到步骤 2

5、 在温度小于某个给定阈值的时候结束。

因此,我们在更新球心的时候,不能直接加上改变值,而是要加上改变值与温度的乘积。

并不是每一道爬山题都可以具体地用温度解决,这只是一个例子。

放代码:

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<iostream>
#define N 100005
#define inf 1000000000
#define ll long long
struct node{int x,y;}a[N];
int n,mn=inf,mx=-inf,bx[N],by[N];ll ans=inf*10000000ll,sumx[N],sumy[N];
using namespace std;
int main()
{scanf("%d",&n);int x,y;for(int i=1;i<=n;i++){scanf("%d%d",&x,&y);a[i].x=x+y,a[i].y=x-y;bx[i]=a[i].x;by[i]=a[i].y;}sort(bx+1,bx+n+1);sort(by+1,by+n+1);for(int i=1;i<=n;i++)sumx[i]=sumx[i-1]+bx[i],sumy[i]=sumy[i-1]+by[i];for(int i=1;i<=n;i++){ll h=0;ll l;l=lower_bound(bx+1,bx+n+1,a[i].x)-bx;h+=(l*2-n)*a[i].x*1ll-sumx[l]*2+sumx[n];l=lower_bound(by+1,by+n+1,a[i].y)-by;h+=(l*2-n)*a[i].y*1ll-sumy[l]*2+sumy[n];if(h<ans)ans=h;}printf("%lld\n",ans/2);
}

51nod3148 松鼠聚会相关推荐

  1. BZOJ 3170: [Tjoi 2013]松鼠聚会 切比雪夫距离

    3170: [Tjoi 2013]松鼠聚会 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...

  2. bzoj 3170: [Tjoi 2013]松鼠聚会

    3170: [Tjoi 2013]松鼠聚会 Description 有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点,距离为1. ...

  3. P3964 [TJOI2013]松鼠聚会【切比雪夫距离】

    P3964 [TJOI2013]松鼠聚会 题意:给出nnn个点(xi,yi)(x_i,y_i)(xi​,yi​),找到某个点,使得所有点到该点的切比雪夫距离和最小. 一. A(x1,y1),B(x2, ...

  4. 算法笔记——曼哈顿距离,切比雪夫距离,曼哈顿距离之和 P3964 [TJOI2013]松鼠聚会

    P3964 [TJOI2013]松鼠聚会 题目描述 草原上住着一群小松鼠,每个小松鼠都有一个家.时间长了,大家觉得应该聚一聚.但是草原非常大,松鼠们都很头疼应该在谁家聚会才最合理. 每个小松鼠的家可以 ...

  5. bzoj3170【TJOI2013】松鼠聚会

    3170: [Tjoi 2013]松鼠聚会 Time Limit: 10 Sec   Memory Limit: 128 MB Submit: 965   Solved: 475 [ Submit][ ...

  6. BZOJ3170: [Tjoi2013]松鼠聚会(切比雪夫距离转曼哈顿距离)

    Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1524  Solved: 803 [Submit][Status][Discuss] Descrip ...

  7. 松鼠聚会(洛谷-P3964)

    题目描述 草原上住着一群小松鼠,每个小松鼠都有一个家.时间长了,大家觉得应该聚一聚.但是草原非常大,松鼠们都很头疼应该在谁家聚会才最合理. 每个小松鼠的家可以用一个点x,y表示,两个点的距离定义为点( ...

  8. [TJOI2013]松鼠聚会

    题目描述 草原上住着一群小松鼠,每个小松鼠都有一个家.时间长了,大家觉得应该聚一聚.但是草原非常大,松鼠们都很头疼应该在谁家聚会才最合理. 每个小松鼠的家可以用一个点x,y表示,两个点的距离定义为点( ...

  9. 洛谷3964 [TJOI2013]松鼠聚会

    题目描述 草原上住着一群小松鼠,每个小松鼠都有一个家.时间长了,大家觉得应该聚一聚.但是草原非常大,松鼠们都很头疼应该在谁家聚会才最合理. 每个小松鼠的家可以用一个点x,y表示,两个点的距离定义为点( ...

最新文章

  1. 中山大学 计算机院博士录取名学,中山大学2021年博士研究生招生拟录取名单公示,2510人!...
  2. Material Master
  3. 利用commons-fileupload 上传图片(包含表单数据)
  4. error: field 'b' has imcomplete type
  5. 【资源】机器学习资料包来袭
  6. mysql查看当前数据库的连接信息_查看 mysql 数据库当前连接数
  7. 蜡烛图plotly_Python数据分析:基于Plotly的动态可视化绘图简介,目录书摘
  8. 【html xml】gt; 大于 lt; 小于
  9. 整人电脑BAT小程序源码大全
  10. 台达PLC,触摸屏程序工程案例 含电气图 台达与伺服变频通讯实例
  11. iOS Zip文件解压
  12. SQL Server 由于一个或多个对象访问此列,ALTER TABLE DROP COLUMN xxx 失败问题解决
  13. Informer时序模型(自定义项目)
  14. PS问题汇总2017
  15. 文小刚:量子革命是最不可思议的物理革命
  16. 经典100句——人生与社会
  17. 计算机应用编程师职业指导,计算机应用个人职业生涯规划书.doc
  18. window磁盘id与序列号
  19. C#--窗体控件(选择类控件)
  20. 敏捷开发之一—笼统的介绍

热门文章

  1. 金蝶服务器响应异常,金蝶提示连接金蝶云服务器异常
  2. 倒计算程序php,ASP_用ASP实现距指定日期的倒记时程序源码,给一个特殊的日子设计一个倒 - phpStudy...
  3. 部署MariaDB服务器
  4. 【转】PCIE 通道x4/8/16的定义
  5. 关于显卡PCIE3.0 X16 X8 X4 X1速度的测试
  6. matlab 手把手教你制作五子棋小游戏
  7. 经典SQL学习笔记 (四)-子查询
  8. TortoiseSVN教程级别指南
  9. LeetCode第258场周赛
  10. 树莓派 Raspberry Pi 3B+ 无线路由器, WEB 服务器(Nginx,PHP,Sqlite3),UART 串口数据采集