题目链接

将原坐标系每个点的坐标\((x,y)\)变为\((x+y,x-y)\),则原坐标系中的曼哈顿距离等于新坐标系中的切比雪夫距离。

反过来,将原坐标系每个点的坐标\((x,y)\)变为\((\frac{x+y}{2},\frac{x-y}{2})\),则原坐标系中的切比雪夫距离等于新坐标系中的曼哈顿距离。

随便写两个点就可以验证这是对的。

将题目中每个点的坐标\((x,y)\)改为\((\frac{x+y}{2},\frac{x-y}{2})\),然后记\(dis(a,b)=\Delta X+\Delta Y\)表示两个点\(a,b\)间的曼哈顿距离。

枚举每一个点\(x\),则到\(x\)的距离之和为\(Sum=\sum_{i=1}^ndis(i,x)\)。

把\(dis(i,x)\)拆开,即$$\begin{aligned}Sum&=\sum_{i=1}^n\Delta X(i,x)+\Delta Y(i,x)\&=\Delta X(1,x)+\Delta X(2,x)+...+\Delta Y(1,x)+\Delta Y(2,x)...\end{aligned}$$

把每个点按\(x\)或\(y\)排序,枚举点时就可以\(O(1)\)计算\(\Delta X\)或\(\Delta Y\)的变化量了。

当然没必要先把坐标\(x,y\)除以\(2\)。最后把答案除以\(2\)即可。

我否认在刷水题的事实。

//3072kb	264ms
#include <cstdio>
#include <cctype>
#include <algorithm>
//#define gc() getchar()
#define MAXIN 300000
#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
typedef long long LL;
const int N=1e5+5; LL Ans[N];
char IN[MAXIN],*SS=IN,*TT=IN;
struct Point
{
int x,y,id;
Point(int tid=0,int ty=0,int tx=0) {id=tid, x=tx+ty, y=tx-ty;}
}p[N]; inline int read()
{
int now=0,f=1;register char c=gc();
for(;!isdigit(c);c=='-'&&(f=-1),c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now*f;
}
bool cmpx(Point a,Point b)
{
return a.x<b.x;
}
bool cmpy(Point a,Point b)
{
return a.y<b.y;
} int main()
{
int n=read();
for(int i=1; i<=n; ++i) p[i]=Point(i,read(),read()); std::sort(p+1,p+1+n,cmpx);
LL sum=-1ll*(n-1)*p[1].x;
for(int i=2; i<=n; ++i) sum+=p[i].x;
for(int i=1; i<=n; ++i)
Ans[p[i].id]+=sum, sum+=(2ll*i-n)*(p[i+1].x-p[i].x);//i*dx-(n-i)*dx std::sort(p+1,p+1+n,cmpy);
sum=-1ll*(n-1)*p[1].y;
for(int i=2; i<=n; ++i) sum+=p[i].y;
for(int i=1; i<=n; ++i)
Ans[p[i].id]+=sum, sum+=(2ll*i-n)*(p[i+1].y-p[i].y); LL ans=1e18;
for(int i=1; i<=n; ++i) ans=std::min(ans,Ans[i]);
printf("%lld\n",ans>>1); return 0;
}

BZOJ.3170.[TJOI2013]松鼠聚会(切比雪夫距离转曼哈顿距离)的更多相关文章

  1. BZOJ 3170 [Tjoi2013]松鼠聚会

    题解:切比雪夫距离转化为曼哈顿距离 枚举源点,横纵坐标互不影响,分开考虑,前缀和优化 横纵分开考虑是一种解题思路 #include<iostream> #include<cstdio ...

  2. BZOJ - 3170: 松鼠聚会 (切比雪夫转曼哈顿距离)

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

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

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

  4. BZOJ3170 [Tjoi2013]松鼠聚会 切比雪夫距离 - 曼哈顿距离 - 前缀和

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

  5. Bzoj3170: [Tjoi2013]松鼠聚会 (切比雪夫距离)

    题目链接 显然,题目要求我们求切比雪夫距离,不会的可以去看一下attack的博客. 考虑枚举所有的点 转换为曼哈顿距离后. 那么对于这个点的路程和是. \[\sum_{i=1}^n | x_i - x ...

  6. 3170: [Tjoi2013]松鼠聚会

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

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

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

  8. BZOJ 3170 松鼠聚会(切比雪夫距离转曼哈顿距离)

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

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

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

随机推荐

  1. HTML&javaSkcript&CSS&jQuery&ajax(四)

    一.HTML创建响应设计 Responsive Web Design 可以改变尺寸传递网页,对于平板和移动设备是必须的 1.<!DOCTYPE html><html lang=&qu ...

  2. IDEA文件对比

  3. G: Dave的时空迷阵(next数组)

    G: Dave的时空迷阵 Time Limit: 1 s      Memory Limit: 128 MB Submit My Status Problem Description 皇家理工本部隐藏 ...

  4. xxl系列部署启动通用办法

    http://10.10.6.186:8080/xxl-job-admin # 编译mvn compile # 清理mvn clean # 打包mvn package # 先清理后编译mvn clea ...

  5. elk服务器和运维服务器的IPTABLES

    --运维服务器 iptables -P INPUT ACCEPT iptables -F iptables -X iptables -Z iptables -A INPUT -i lo -j ACCE ...

  6. 试验IFTTT同步发微博

    没啥 测试下同步发微博    

  7. Flink--connect

    用来将两个dataStream组装成一个ConnectedStreams 而且这个connectedStream的组成结构就是保留原有的dataStream的结构体:这样我们就可以把不同的数据组装成同 ...

  8. zabbix http服务监控实例

    1在被监控主机安装http服务 ,监听80端口 systemctl start httpd.service       启动服务  80端口已经启动 设定,监控80端口,当服务不当时先自动重启服务 2 ...

  9. keepalived配置介绍

    第一节 keepalived 高可用集群: 系统的可性= MTBF /(MTBF+MTTR) 系统可用时间,系统故障修复时间. 活动的节点将通过心跳不停的将自己的状态信息同步到备用节点上,一但主节点挂 ...

  10. Vue 组件(上)转载

    一.定义 组件:应用界面上一个个的区块. 自定义的HTML元素. 二.创建和注册 Vue.extend() 扩展,创建组件构造器 Vue.component()注册组件,2个参数,1为标签,2是组件构 ...