题目传送门

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

有了这个知识,我们便可以在读入松鼠的家的坐标时,先把他转化一下,然后把最后的总式化简,我们会得到一个充满后缀和以及前缀和的式子,这里有十分详细的展开式。于是我们把$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. (转)typedef用法

    Typedef 声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法.不管怎样,使用 typedef 能为代码带来意想不到的好处,通过本文你可以学习用 typedef 避免缺欠,从而使代码更健壮 ...

  2. Centos6.5 安装 Oracle11gR2(64位)

    Centos6.5安装 Oracle11gR2(64位) 安装centos6.5 (我的是虚拟机环境) 1.  下载centos6.5的安装包,不解释. 例如以下图: 2.  下载oracle安装包, ...

  3. Lambda 闭包 匿名 函数 类

    深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法) - _Luc_ - 博客园 https://www.cnblogs.com/figure9/p/java-8 ...

  4. Session Timeout 与 $.ajaxSetup

    对于session过期跳转的问题,很简单,就是一个过滤器,然后判断session为空?跳转:继续.但是对于ajax的请求,需要做特殊处理,见下面代码中的 // 此处考虑ajax操作session过期的 ...

  5. file类简单操作

    file类可表示文件或文件夹 import java.io.File; import java.io.FilenameFilter; import java.io.IOException; impor ...

  6. (C)*p++和*++p区别

    接下来,通过示例彻底理解自增运算符的两种用法(自减的用法与之类似,只不过是加1变成了减1). 1.++i和i++的区别 如清单1(注意代码中的注释): #include <stdio.h> ...

  7. (linux)MMC 卡驱动分析

    最近花时间研究了一下 MMC 卡驱动程序,开始在网上找了很多关于 MMC 卡驱动的分析文章,但大都是在描述各个层,这对于初学者来讲帮助并不大,所以我就打算把自己的理解写下来,希望对大家有用.个人觉得理 ...

  8. Linux时间子系统之四:定时器的引擎:clock_event_device【转】

    本文转载自:http://blog.csdn.net/droidphone/article/details/8017604 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+] ...

  9. vfork函数的使用【学习笔记】

    #include "apue.h" ; int main(void) { int var; pid_t pid; ; printf("before vfork\r\n&q ...

  10. 修改DEDE系统数据库表前缀

    1,修改之前我们先备份下数据(哥们儿之前没有备份,我艹,害苦了),备份的操作过程是:网站后台------系统------数据库备份/还原-------然后按提交.默认保存的数据在data/backup ...