3170: [Tjoi 2013]松鼠聚会

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 1318  Solved: 664
[Submit][Status][Discuss]

Description

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

Input

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

Output

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

Sample Input

6
-4 -1
-1 -2
2 -4
0 2
0 3
5 -2

Sample Output

20
  这道题貌似纯考小知识点吧……
  不得不说做这道题挺长姿势的,科普一下:欧几里德距离,曼哈顿距离,切比雪夫距离(在这里博主不介绍在数学其他方面的定义,用途)。
    欧几里德距离: 两点间的直线距离。(sqrt((x1-x2)^2+(y1-y2)^2))
    曼哈顿距离(出租车几何):两个点在标准坐标系上的绝对轴距总和。(|x1-x2|+|y1-y2|)。
    切比雪夫距离(棋盘距离):在国际象棋中国王到其他点的距离。(max(|x1-x2|,|y1-y2|))。
  这三个距离各有各的用处,这道题主要涉及的是曼哈顿距离和切比雪夫距离的转化。
  首先先明确一点,松鼠家之间的距离是切比雪夫距离,即我们先斜着走,在横着或竖着走,显而易见是最快的。
  但是,这样我们只能写出n^2打法,过这道题还是不太可能。因此,我们需要一个神奇的东西:切比雪夫距离转曼哈顿距离。
    设两个点为(x1,y1)(x2,y2)把两个点换成(x1+y1,x1-y1)(x2+y2,x2-y2)他们的曼哈顿距离除二就是(x1,y1)(x2,y2)的切比雪夫距离。
  剩下的,我们利用前缀和就可以做到了。
  至于证明,网上很多。
 #include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <string>
#include <queue>
#include <algorithm>
#include <cmath>
#include <map>
#define N 100005
using namespace std;
int n;
struct no
{
long long x,y,bh;
}node[N];
long long ans[N],sumx[N],sumy[N];
bool px1(no a,no b)
{
if(a.x==b.x)return a.y<b.y;
return a.x<b.x;
}
bool px2(no a,no b)
{
if(a.y==b.y)return a.x<b.x;
return a.y<b.y;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
node[i].x=x+y,node[i].y=x-y;
node[i].bh=i;
}
sort(node+,node++n,px1);
for(int i=;i<=n;i++) sumx[i]=node[i].x+sumx[i-]; for(long long i=;i<=n;i++)
{
ans[node[i].bh]+=i*node[i].x-sumx[i]+sumx[n]-sumx[i]-(n-i)*node[i].x;
}
sort(node+,node++n,px2);
for(int i=;i<=n;i++)sumy[i]=node[i].y+sumy[i-];
for(long long i=;i<=n;i++)
{
ans[node[i].bh]+=i*node[i].y-sumy[i]+sumy[n]-sumy[i]-(n-i)*node[i].y; } long long an=1000000000ll*1000000000ll;
for(int i=;i<=n;i++)
{
if(ans[i]/<an)an=ans[i]/;
}
printf("%lld\n",an);
return ;
}

Bzoj 3170[Tjoi 2013]松鼠聚会 曼哈顿距离与切比雪夫距离的更多相关文章

  1. bzoj 3170 Tjoi 2013 松鼠聚会 曼哈顿距离&&切比雪夫距离

    因为曼哈顿距离很好求,所以要把每个点的坐标转换一下. 转自:http://blog.csdn.net/slongle_amazing/article/details/50911504 题解 两个点的切 ...

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

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

  3. BZOJ 3170: [Tjoi 2013]松鼠聚会( sort )

    题目的距离为max(|x1-x2|, |y1-y2|) (切比雪夫距离). 切比雪夫距离(x, y)->曼哈顿距离((x+y)/2, (x-y)/2) (曼哈顿(x, y)->切比雪夫(x ...

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

    #include<cstdio> #include<iostream> #include<algorithm> #define M 100008 using nam ...

  5. bzoj-3170 3170: [Tjoi 2013]松鼠聚会(计算几何)

    题目链接: 3170: [Tjoi 2013]松鼠聚会 Time Limit: 10 Sec  Memory Limit: 128 MB Description 有N个小松鼠,它们的家用一个点x,y表 ...

  6. 3170: [Tjoi 2013]松鼠聚会

    题目大意 给定n个点,找到一个点使这个点到其他所有点的切比雪夫距离之和最小. 题解 我们知道切比雪夫距离和曼哈顿距离的转化公式 \(1\)表示切比雪夫距离,\(2\)表示曼哈顿距离 我们有: \(x_ ...

  7. [Tjoi 2013]松鼠聚会

    3170: [Tjoi 2013]松鼠聚会 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1318  Solved: 664[Submit][Stat ...

  8. BZOJ3170: [Tjoi 2013]松鼠聚会

    3170: [Tjoi 2013]松鼠聚会 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 531  Solved: 249[Submit][Statu ...

  9. 【bzoj3170】[Tjoi 2013]松鼠聚会 旋转坐标系

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

随机推荐

  1. Java中动态代理技术生成的类与原始类的区别 (good)

    用动态代理的时候,对它新生成的类长什么样子感到好奇.有幸通过一些资料消除了心里的疑惑. 平时工作使用的Spring框架里面有一个AOP(面向切面)的机制,只知道它是把类重新生成了一遍,在切面上加上了后 ...

  2. Delphi移动开发笔记(一)

    Delphi从XE4版本就开始支持移动开发了,但是笔者最近才开始学习这块内容.因为笔者原来一直使用的是Delphi7,对于很多新语法没有了解过,所以把其中一些东西记录下来.        程序开发,调 ...

  3. C#调用记事本并填写内容

    using System.Runtime.InteropServices; using System.Diagnostics;   [DllImport("User32.DLL") ...

  4. 项目集成dubbo

    dubbo 用户指南: http://dubbo.io/User+Guide-zh.htm 开发指南:http://dubbo.io/Developer+Guide-zh.htm#DeveloperG ...

  5. qt获得本地IP的方法,qt中域名解析的方法

    本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境:Ubuntu10.04 + Qt4.7.0 Linux获得本地IP的方法,我尝试了两种 1.用QH ...

  6. Centos 7 防火墙 firewalld 简单使用说明

    1.firewalld简介 firewalld是centos7的一大特性,最大的好处有两个:支持动态更新,不用重启服务:第二个就是加入了防火墙的“zone”概念   2.firewalld命令行界面管 ...

  7. 基于 Kong 和 Kubernetes 的 WebApi 多版本解决方案

    前言 大家好,很久没有写博客了,最近半年也是比较的忙,所以给关注我的粉丝们道个歉.去年和朱永光大哥聊的时候提了一下我们的这个方案,他说让我有空写篇博客讲一下,之前是非常的忙,所以这次趁着有些时间就写一 ...

  8. m3u8解析、转码、下载、合并

    m3u8解析.转码.下载.合并 现在网也上大多数视频需要下载都很麻烦,极少数是MP4,大多都是m3u8, 先说视频下载, pc端: 打开网页,点击视频播放,打开开发者工具,找到网络那一栏, 等整个网页 ...

  9. 在网页中添加动画,使用WOW.js来实现

    [来源] 页面在向下滚动的时候,有些元素会产生细小的动画效果.虽然动画比较小,但却能吸引你的注意 刚知道wow.js这个插件,之前写的类似滚动时页面效果都是自己用jQuery写的,现在有了插件,开发更 ...

  10. eclipse 工具在工作中实用方法

    不断更新记录工作中用到的实用技巧 1.快捷方式管理多个工作空间 参数: -showlocation 设置eclipse顶部显示工作空间位置 -data 文件位置 设置打开的工作空间位置 创建eclip ...