[TJOI2013]松鼠聚会(枚举)
[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]松鼠聚会(枚举)的更多相关文章
- 【bzoj3170】[Tjoi2013]松鼠聚会
3170: [Tjoi2013]松鼠聚会 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1670 Solved: 885[Submit][Statu ...
- BZOJ_3170_[Tjoi2013]松鼠聚会_切比雪夫距离+前缀和
BZOJ_3170_[Tjoi2013]松鼠聚会_切比雪夫距离+前缀和 题意:有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点, ...
- [TJOI2013]松鼠聚会 曼哈顿距离
[TJOI2013]松鼠聚会 luogu P3964 首先容易得到两点间距离是\(max(|x_1-x_2|, |y_1-y_2|)\)(即切比雪夫距离) 然后有个套路:原\((x,y)\)求曼哈顿距 ...
- 洛谷P3964 [TJOI2013]松鼠聚会 [二分答案,前缀和,切比雪夫距离]
题目传送门 松鼠聚会 题目描述 草原上住着一群小松鼠,每个小松鼠都有一个家.时间长了,大家觉得应该聚一聚.但是草原非常大,松鼠们都很头疼应该在谁家聚会才最合理. 每个小松鼠的家可以用一个点x,y表示, ...
- BZOJ3170: [Tjoi2013]松鼠聚会(切比雪夫距离转曼哈顿距离)
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1524 Solved: 803[Submit][Status][Discuss] Descripti ...
- 洛谷3964 [TJOI2013]松鼠聚会
题目描述 草原上住着一群小松鼠,每个小松鼠都有一个家.时间长了,大家觉得应该聚一聚.但是草原非常大,松鼠们都很头疼应该在谁家聚会才最合理. 每个小松鼠的家可以用一个点x,y表示,两个点的距离定义为点( ...
- [TJOI2013]松鼠聚会 BZOJ 3170
题目描述 草原上住着一群小松鼠,每个小松鼠都有一个家.时间长了,大家觉得应该聚一聚.但是草原非常大,松鼠们都很头疼应该在谁家聚会才最合理. 每个小松鼠的家可以用一个点x,y表示,两个点的距离定义为点( ...
- 3170: [Tjoi2013]松鼠聚会
Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1804 Solved: 968[Submit][Status][Discuss] Descript ...
- LuoguP3964 [TJOI2013]松鼠聚会【切比雪夫距离/前缀和】
题目传送门 前置知识:切比雪夫距离和曼哈顿距离的相互转化--自为风月马前卒 有了这个知识,我们便可以在读入松鼠的家的坐标时,先把他转化一下,然后把最后的总式化简,我们会得到一个充满后缀和以及前缀和的式 ...
随机推荐
- HTML技巧:怎样禁止图片拖动复制
用jQuery实现代码: <script> var imgs=$("img"); imgs.on("contextmenu",function(){ ...
- Javascript获取html元素的几种方法
1.通过id获取html元素 <!DOCTYPE html> <html> <head lang="en"> <meta charset= ...
- java:HTML(table表格,ul列表)和CSS(导入.css文件,三种定义颜色方式,三种样式选择器,a标签属性顺序,)
1.重点掌握: html: 1.form表单:input,checkbox,seelct,radio,button,submit 2.table表格:thead-->tr-->th;tbo ...
- Day02:变量 / JAVA基本类型
变量 什么是变量? 变化数值的载体 变量声明.初始化.使用 声明变量 类型 大小(占用空间) int x; 初始化变量 (赋值) 给予占用空间 int x=35; 使用变量 直接使用变量名 注意: ...
- python基础学习笔记-切片难点
numbers = [1,2,3,4,5,6,7,8,9,10] print(numbers[5::-2]) print(numbers[10:5:-2]) print(numbers[:5:-2]) ...
- python 并发编程 非阻塞IO模型
非阻塞IO(non-blocking IO) Linux下,可以通过设置socket使其变为non-blocking.当对一个non-blocking socket执行读操作时,流程是这个样子: 从图 ...
- excel常用公式--逻辑运算类
if: IF(logical_test, value_if_true, [value_if_false]). and: 逻辑判断,相当于“并”. or: 逻辑判断,相当于“或”.
- zabbix4安装部署
参考: https://www.cnblogs.com/barneywill/p/10380622.html https://www.cnblogs.com/yinzhengjie/p/1037256 ...
- CentOS7之ssh-Xshell密钥认证登陆
操作系统版本:CentOS Linux release 7.2.1511 (Core) SSH版本:OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 1.打开Xshell工 ...
- Spring(二)--Spring入门案例
Spring入门案例 1.需要的实体类 2.需要的接口和实现类 3.需要的service和实现类 /** * service层的作用 * 在不改变dao层代码的前提下,增加业务逻辑操作 */ publ ...