当前位置: 首页 > news >正文

BZOJ 3170 [Tjoi 2013]松鼠聚会

题目描述

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

输入

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

输出

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

样例输入

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

样例输出

20

 

解题思路

  新学了一个姿势——切比雪夫距离(题目中定义的那个距离)。

  A(x1,y1)与B(x2,y2)的切比雪夫距离等于A’(x1+y1,x1-y1)和B’(x2+y2,x2-y2)的曼哈顿距离。证明挺简单的。

  把每个点$(x,y)$转换成$(x+y,x-y)$,然后枚举松鼠们的目的地,找出最短距离。枚举目的地统计答案用前缀和优化。

源代码

来自于http://blog.csdn.net/aarongzk/article/details/51138617

#include<iostream>  
#include<cstdio>  
#include<cstdlib>  
#include<cstring>  
#include<cmath>  
#include<algorithm>  
#define F(i,j,n) for(int i=j;i<=n;i++)  
#define D(i,j,n) for(int i=j;i>=n;i--)  
#define ll long long  
#define maxn 100005  
#define inf 1000000000000000000ll  
using namespace std;  
int n,pos,x[maxn],y[maxn];  
ll ans,tmp,sumx[maxn],sumy[maxn];  
struct data{ll x,y;}a[maxn];  
inline int read()  
{  
    int x=0,f=1;char ch=getchar();  
    while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}  
    while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}  
    return x*f;  
}  
int main()  
{  
    n=read();  
    F(i,1,n)  
    {  
        int xx=read(),yy=read();  
        x[i]=a[i].x=xx+yy;  
        y[i]=a[i].y=xx-yy;  
    }  
    sort(x+1,x+n+1);sort(y+1,y+n+1);  
    F(i,1,n) sumx[i]=sumx[i-1]+x[i],sumy[i]=sumy[i-1]+y[i];  
    ans=inf;  
    F(i,1,n)  
    {  
        pos=lower_bound(x+1,x+n+1,a[i].x)-x;  
        tmp=sumx[n]-sumx[pos]-a[i].x*(n-pos)+a[i].x*pos-sumx[pos];  
        pos=lower_bound(y+1,y+n+1,a[i].y)-y;  
        tmp+=sumy[n]-sumy[pos]-a[i].y*(n-pos)+a[i].y*pos-sumy[pos];  
        ans=min(ans,tmp);  
    }  
    printf("%lld\n",ans/2);  
    return 0;  
}  

 

相关文章:

  • 面向云数据中心的现代数据管理架构
  • 分布式光伏发电及配电网的保护机制探究
  • 光伏组件价格跳水,企业的未来何去何从?
  • 从智能家居的发展看对讲企业的定位
  • 六个对CRM数据分析至关重要的特性
  • Tego与Smartrac合作开发RFID解决方案用于复杂的工业环境
  • 交通部回应共享单车新政:实名制如何确保信息安全
  • Sublime字体设置
  • CS安装卸载测试总结
  • 联发科将推Helio P35:10nm工艺 千元机福音
  • Linux中的硬链接与软链接
  • 中国电信用软件定义来“去电信化”
  • 浙江居然隐藏着这么一匹DDoS攻击防护黑马
  • 从云端到山巅,YunOS让数据和计算的价值无处不在
  • 测试用例级别总结
  • 2019年如何成为全栈工程师?
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • C++类的相互关联
  • const let
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • iOS小技巧之UIImagePickerController实现头像选择
  • JavaScript类型识别
  • JWT究竟是什么呢?
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • ng6--错误信息小结(持续更新)
  • Vue学习第二天
  • 包装类对象
  • 后端_ThinkPHP5
  • 技术发展面试
  • 区块链分支循环
  • 深入浅出webpack学习(1)--核心概念
  • 实现菜单下拉伸展折叠效果demo
  • ​香农与信息论三大定律
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (39)STM32——FLASH闪存
  • (6)STL算法之转换
  • (9)目标检测_SSD的原理
  • (windows2012共享文件夹和防火墙设置
  • (二)JAVA使用POI操作excel
  • (二十四)Flask之flask-session组件
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (十)T检验-第一部分
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)关于多人操作数据的处理策略
  • (轉)JSON.stringify 语法实例讲解
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .gitignore文件设置了忽略但不生效
  • .NET CLR基本术语
  • .Net core 6.0 升8.0