题目传送门

前置知识:切比雪夫距离和曼哈顿距离的相互转化--自为风月马前卒

有了这个知识,我们便可以在读入松鼠的家的坐标时,先把他转化一下,然后把最后的总式化简,我们会得到一个充满后缀和以及前缀和的式子,这里有十分详细的展开式。于是我们把$x$,$y$坐标分别排序并求出他们的前缀和即可。

之后我们枚举每个点,在这个点意义下求出答案,更新答案最小值。

Code

 #include<cstdio>
#include<algorithm> using namespace std;
typedef long long ll; int n;
ll tmp,ans=1e16;
ll subx[],suby[];
ll rx[],ry[];
struct node{
ll x,y;
}p[]; ll check(int u)
{
int pos=;
ll ax=,ay=;
pos=lower_bound(rx+,rx++n,p[u].x)-rx;
ax+=pos*p[u].x-subx[pos];
ax+=subx[n]-subx[pos]-p[u].x*(n-pos);
pos=lower_bound(ry+,ry++n,p[u].y)-ry;
ay+=pos*p[u].y-suby[pos];
ay+=suby[n]-suby[pos]-p[u].y*(n-pos);
return ax+ay;
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
ll x=,y=;
scanf("%lld%lld",&x,&y);
rx[i]=x+y;ry[i]=x-y;
p[i].x=rx[i],p[i].y=ry[i];
}
sort(rx+,rx++n);
sort(ry+,ry++n);
for(int i=;i<=n;i++)
subx[i]=subx[i-]+rx[i],suby[i]=suby[i-]+ry[i];
for(int i=;i<=n;i++)
tmp=check(i),ans=min(ans,tmp);
printf("%lld",ans>>);
return ;
}

* 注意观察式子,在前缀和那里不要用错=w=...

 #include<cstdio>
#include<algorithm> using namespace std;
typedef long long ll; int n;
ll tmp,ans=1e16;
ll subx[],suby[];
ll rx[],ry[];
struct node{
ll x,y;
}p[]; ll check(int u)
{
int pos=;
ll ax=,ay=;
pos=lower_bound(rx+,rx++n,p[u].x)-rx;
ax+=pos*p[u].x-subx[pos];
ax+=subx[n]-subx[pos-]-p[u].x*(n-pos);
pos=lower_bound(ry+,ry++n,p[u].y)-ry;
ay+=pos*p[u].y-suby[pos];
ay+=suby[n]-suby[pos-]-p[u].y*(n-pos);
return ax+ay;
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
ll x=,y=;
scanf("%lld%lld",&x,&y);
rx[i]=x+y;ry[i]=x-y;
p[i].x=rx[i],p[i].y=ry[i];
}
sort(rx+,rx++n);
sort(ry+,ry++n);
for(int i=;i<=n;i++)
subx[i]=subx[i-]+rx[i],suby[i]=suby[i-]+ry[i];
for(int i=;i<=n;i++)
tmp=check(i),ans=min(ans,tmp);
printf("%lld",ans>>);
return ;
}

WA

LuoguP3964 [TJOI2013]松鼠聚会【切比雪夫距离/前缀和】的更多相关文章

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

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

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

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

  3. BZOJ.3170.[TJOI2013]松鼠聚会(切比雪夫距离转曼哈顿距离)

    题目链接 将原坐标系每个点的坐标\((x,y)\)变为\((x+y,x-y)\),则原坐标系中的曼哈顿距离等于新坐标系中的切比雪夫距离. 反过来,将原坐标系每个点的坐标\((x,y)\)变为\((\f ...

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

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

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

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

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

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

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

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

  8. luoguP3964 [TJOI2013]松鼠聚会

    链接 luogu 思路 切比雪夫距离有max,不好优化. 但是我们能转化成曼哈顿距离,只需要 \((x,y)变成(\frac{x+y}{2},\frac{x-y}{2})\) 相反的曼哈顿距离转切比雪 ...

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

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

随机推荐

  1. Json——使用Json jar包实现Json字符串与Java对象或集合之间的互相转换

    总结一下利用Json相关jar包实现Java对象和集合与Json字符串之间的互相转换: 1.创建的User类: package com.ghj.packageofdomain; public clas ...

  2. centos下的hadoop集群实现ssh的无密码登陆

    CentOS 下SSH无密码登录的配置 最近学习Hadoop.它要求各节点之间通过SSH无密码登录,配置SSH的时候费了一番功夫,记录下来,以备忘. 配置SSH无密码登录需要3步: 1.生成公钥和私钥 ...

  3. net spy memcached 使用demo

    package memcached; import java.io.IOException; import java.net.InetSocketAddress; import net.spy.mem ...

  4. C++函数模板例子

    //C++函数模板实例 #include <iostream>template <class Any>void Swap(Any &a, Any &b); in ...

  5. java之集合Collection 具体解释之4

    package cn.itcast_04; public class Student { private String name; private int age; public Student() ...

  6. Alert提示框之后跳转指定页面

    <li onclick="closes();">BTC</li> alert跳转到指定页面 <script type="text/javas ...

  7. solr单机多实例部署文件锁冲突解决的方法

    给出一个有问题的单机多tomcat实例引用同一个solr实例部署图. 这样的部署必定造成一个问题.启动第二个tomcat实例时,一定会报索引目录文件锁已经被占用. 最初的解决的方法是.有多少个tomc ...

  8. app直播原理

    之前写的一系列文章或者小经验一直没有时间去整理放在博客上,今天整理出来,之前是写在作业部落,语法是markdown,点击链接浏览,仅供参考,希望对你有帮助. https://www.zybuluo.c ...

  9. java sleep和wait的区别和联系

    Thread.sleep不会改变锁的行为,如果当前线程拥有锁,那么当前线程sleep之后,该锁不会被释放. Thread.sleep和Object.wait都会暂停当前的线程,让出cpu.Thread ...

  10. MTK平台下Battery驱动分析

    主要涉及代码: Kernel: kernel-3.10\drivers\power\mediatek\ kernel-3.10\drivers\misc\mediatek\mach\mt6580\&l ...