[TJOI2013]松鼠聚会

题目描述

草原上住着一群小松鼠,每个小松鼠都有一个家。时间长了,大家觉得应该聚一聚。但是草原非常大,松鼠们都很头疼应该在谁家聚会才最合理。

每个小松鼠的家可以用一个点x,y表示,两个点的距离定义为点(x,y)和它周围的8个点(x-1,y)(x+1,y),(x,y-1),(x,y+1).(x-1,y+1),(x-1,y-1),(x+1,y+1),(x+1,y-1)距离为1。

输入输出格式

输入格式:

第一行是一个整数N,表示有多少只松鼠。接下来N行,第i行是两个整数x和y,表示松鼠i的家的坐标

输出格式:

一个整数,表示松鼠为了聚会走的路程和最小是多少。

输入输出样例

输入样例#1:

6

-4 -1

-1 -2

2 -4

0 2

0 3

5 -2

输出样例#1:

20

输入样例#2:

6

0 0

2 0

-5 -2

2 -2

-1 2

4 0

输出样例#2:

15

说明

样例解释

在第一个样例中,松鼠在第二只松鼠家(-1,-2)聚会;在第二个样例中,松鼠在第一只松鼠家(0.0)聚会。

数据范围

30%的数据,0 ≤ N ≤ 1000

100%的数据,0 ≤ N ≤ 100000; −10^9 ≤ x, y ≤ 10^9

第一次听说切比雪夫距离这个东西,它可以这样与曼哈顿距离转换。

将一个点 (x,y) 的坐标变为 \((x+y,x−y)\) 后,原坐标系中的曼哈顿距离 = 新坐标系中的切比雪夫距离

将一个点 (x,y) 的坐标变为 \((\frac{x+y}{2},\frac{x-y}{2})\) 后,原坐标系中的切比雪夫距离 = 新坐标系中的曼哈顿距离

于是我们把原坐标系转化一下,转成更加熟悉的曼哈顿距离。

考虑枚举在哪只松鼠家聚会,聚会的路程为\(\sum|X_i-X|+|Y_i-Y|\),但是这样绝对值很难处理。我们可以把X[],Y[]排序,然后查找一下X,Y位置,通过前缀和处理一下就能快速算答案了。

为什么最小的点答案都会超过1<<40???

然后顺序加会long long,换一下加减法顺序就过了???

#include<bits/stdc++.h>
#define lll long long
using namespace std;
lll read(){
lll x=0,w=1;char ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return x*w;
}
const lll N=100010;
lll n,p,q,sx,sy,ans=(1ll<<62);
lll x[N],y[N],xx[N],yy[N],sumx[N],sumy[N];
lll check1(lll v){
lll l=1,r=n;
while(l<r){
lll mid=(l+r)/2;
if(x[mid]>=v)r=mid;
else l=mid+1;
}return l;
}
lll check2(lll v){
lll l=1,r=n;
while(l<r){
lll mid=(l+r)/2;
if(y[mid]>=v)r=mid;
else l=mid+1;
}return l;
}
int main(){
n=read();
for(lll i=1;i<=n;i++){
p=read();q=read();
xx[i]=x[i]=p+q;yy[i]=y[i]=p-q;
}
sort(x+1,x+1+n);sort(y+1,y+1+n);
for(lll i=1;i<=n;i++)
sumx[i]=sumx[i-1]+x[i],sumy[i]=sumy[i-1]+y[i];
for(lll i=1;i<=n;i++){
lll p1=check1(xx[i]),p2=check2(yy[i]);
sx=sumx[n]-sumx[p1]-(n-p1)*xx[i]+p1*xx[i]-sumx[p1];
sy=sumy[n]-sumy[p2]-(n-p2)*yy[i]+p2*yy[i]-sumy[p2];
ans=min(ans,sx+sy);
}printf("%lld\n",ans/2);
}

[TJOI2013]松鼠聚会(枚举)的更多相关文章

  1. 【bzoj3170】[Tjoi2013]松鼠聚会

    3170: [Tjoi2013]松鼠聚会 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1670  Solved: 885[Submit][Statu ...

  2. BZOJ_3170_[Tjoi2013]松鼠聚会_切比雪夫距离+前缀和

    BZOJ_3170_[Tjoi2013]松鼠聚会_切比雪夫距离+前缀和 题意:有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点, ...

  3. [TJOI2013]松鼠聚会 曼哈顿距离

    [TJOI2013]松鼠聚会 luogu P3964 首先容易得到两点间距离是\(max(|x_1-x_2|, |y_1-y_2|)\)(即切比雪夫距离) 然后有个套路:原\((x,y)\)求曼哈顿距 ...

  4. 洛谷P3964 [TJOI2013]松鼠聚会 [二分答案,前缀和,切比雪夫距离]

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

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

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

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

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

  7. [TJOI2013]松鼠聚会 BZOJ 3170

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

  8. 3170: [Tjoi2013]松鼠聚会

    Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1804  Solved: 968[Submit][Status][Discuss] Descript ...

  9. LuoguP3964 [TJOI2013]松鼠聚会【切比雪夫距离/前缀和】

    题目传送门 前置知识:切比雪夫距离和曼哈顿距离的相互转化--自为风月马前卒 有了这个知识,我们便可以在读入松鼠的家的坐标时,先把他转化一下,然后把最后的总式化简,我们会得到一个充满后缀和以及前缀和的式 ...

随机推荐

  1. xstream解析xml时遇到特殊字符出错

    在xml中有"&"符号时,解析xml出错 解决办法: 将&替换成&

  2. 使用matlab用优化后的梯度下降法求解达最小值时参数

    matlab可以用 -Conjugate gradient -BFGS -L-BFGS 等优化后的梯度方法来求解优化问题.当feature过多时,最小二乘计算复杂度过高(O(n**3)),此时 这一些 ...

  3. django中的model 的unique_together(联合唯一)

    unique_together解释 nique_together 这个元数据是非常重要的一个!它等同于数据库的联合约束! 举个例子,假设有一张用户表,保存有用户的姓名.出生日期.性别和籍贯等等信息.要 ...

  4. Selenium 2自动化测试实战20(操作cookie)

    一.操作cookie 有时候我们需要验证浏览器中cookie是否正确,因为基于真实cookie的测试是无法通过白盒和集成测试的.WebDriver提供了操作Cookie的相关方法,可以读取.添加和删除 ...

  5. VSCode添加 console.log 快捷键

    file - preferences - keyboard shortcuts - keybindings.json:   添加:   {   "key": "ctrl+ ...

  6. C#使用NPOI读写excel

    本帖内容来自网络+自己稍作整理,已找不到原贴,侵删 个人比较习惯用NPOI操作excel,方便易理解.在宇宙第一IDE(笑)——VS2017中插入NPOI就很方便: 首先安装NPOI: 然后在.cs文 ...

  7. 【react】input输入框可输入的最好实现方式

    使用的是refs.react中输入框不能直接定义value.输入框是可变的,react会提示报错.需要使用的inChange事件(输入框内容被改变时触发). 要定义输入框初始值,需要在componen ...

  8. Centos7 修改系统时间和硬件时间不一致的问题

    查看系统时间 [root@localhost ~]# dateSat Feb 24 14:41:22 CST 2018 查看硬件时间 [root@localhost ~]# hwclock --sho ...

  9. 使用vue做项目如何提高代码效率

    最近做了两个vue项目,算上之前做的两个项目,总共有四个vue项目的经验了,但是总体来说写的代码质量不是很高,体现在以下几点 1.代码没有高效的复用 自从使用vue做项目之后,以前使用面向过程变成的习 ...

  10. P2814 家谱

    我真没什么创意了woc.. so,为什么一道水题是蓝色的???哦哦哦,水好像就是蓝色的,emmm那就不是恶意评分了嘤嘤嘤 ... 好吧实际上可能是非c党对于字符串的处理需要进行编号和结构体,会麻烦一点 ...