题目传送门

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

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

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

Code

  1. #include<cstdio>
  2. #include<algorithm>
  3.  
  4. using namespace std;
  5. typedef long long ll;
  6.  
  7. int n;
  8. ll tmp,ans=1e16;
  9. ll subx[],suby[];
  10. ll rx[],ry[];
  11. struct node{
  12. ll x,y;
  13. }p[];
  14.  
  15. ll check(int u)
  16. {
  17. int pos=;
  18. ll ax=,ay=;
  19. pos=lower_bound(rx+,rx++n,p[u].x)-rx;
  20. ax+=pos*p[u].x-subx[pos];
  21. ax+=subx[n]-subx[pos]-p[u].x*(n-pos);
  22. pos=lower_bound(ry+,ry++n,p[u].y)-ry;
  23. ay+=pos*p[u].y-suby[pos];
  24. ay+=suby[n]-suby[pos]-p[u].y*(n-pos);
  25. return ax+ay;
  26. }
  27.  
  28. int main()
  29. {
  30. scanf("%d",&n);
  31. for(int i=;i<=n;i++)
  32. {
  33. ll x=,y=;
  34. scanf("%lld%lld",&x,&y);
  35. rx[i]=x+y;ry[i]=x-y;
  36. p[i].x=rx[i],p[i].y=ry[i];
  37. }
  38. sort(rx+,rx++n);
  39. sort(ry+,ry++n);
  40. for(int i=;i<=n;i++)
  41. subx[i]=subx[i-]+rx[i],suby[i]=suby[i-]+ry[i];
  42. for(int i=;i<=n;i++)
  43. tmp=check(i),ans=min(ans,tmp);
  44. printf("%lld",ans>>);
  45. return ;
  46. }

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

  1. #include<cstdio>
  2. #include<algorithm>
  3.  
  4. using namespace std;
  5. typedef long long ll;
  6.  
  7. int n;
  8. ll tmp,ans=1e16;
  9. ll subx[],suby[];
  10. ll rx[],ry[];
  11. struct node{
  12. ll x,y;
  13. }p[];
  14.  
  15. ll check(int u)
  16. {
  17. int pos=;
  18. ll ax=,ay=;
  19. pos=lower_bound(rx+,rx++n,p[u].x)-rx;
  20. ax+=pos*p[u].x-subx[pos];
  21. ax+=subx[n]-subx[pos-]-p[u].x*(n-pos);
  22. pos=lower_bound(ry+,ry++n,p[u].y)-ry;
  23. ay+=pos*p[u].y-suby[pos];
  24. ay+=suby[n]-suby[pos-]-p[u].y*(n-pos);
  25. return ax+ay;
  26. }
  27.  
  28. int main()
  29. {
  30. scanf("%d",&n);
  31. for(int i=;i<=n;i++)
  32. {
  33. ll x=,y=;
  34. scanf("%lld%lld",&x,&y);
  35. rx[i]=x+y;ry[i]=x-y;
  36. p[i].x=rx[i],p[i].y=ry[i];
  37. }
  38. sort(rx+,rx++n);
  39. sort(ry+,ry++n);
  40. for(int i=;i<=n;i++)
  41. subx[i]=subx[i-]+rx[i],suby[i]=suby[i-]+ry[i];
  42. for(int i=;i<=n;i++)
  43. tmp=check(i),ans=min(ans,tmp);
  44. printf("%lld",ans>>);
  45. return ;
  46. }

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. 一个简单演示样例来演示用PHP訪问表单变量

    首先编写表单页面orderform.html,用post方法请求服务端脚本文件:processorder.php orderform.html: <!DOCTYPE html> <h ...

  2. hiberinate二级缓存

    hibernate.cfg.xml配置 <!-- 二级缓存类型 --> <property name="hibernate.cache.region.factory_cla ...

  3. 用NHibernate处理带属性的多对多关系

    1.引言 老谭在面试开发者的时候,为了考察他们的数据库开发能力,经常祭出我的法宝,就是大学数据库教程中讲到的一个模式:学生选课.这个模式是这种: 在这个模式中,学生(Student)和课程(Cours ...

  4. 使用Javamelody验证struts-spring框架与springMVC框架下action的訪问效率

    在前文中我提到了关于为何要使用springMVC的问题,当中一点是使用springMVC比起原先的struts+spring框架在效率上是有优势的.为了验证这个问题,我做了两个Demo来验证究竟是不是 ...

  5. Fastreport生成WEB报表

    开发WEB应用系统通常都会遇到报表打印问题.简单应用可利用IE的页面打印功能,利用HTML标签控制格式来实现.但复杂的业务型应用系统,报表不仅是组成应用的 重要部分,还常常是相当复杂的.现在很多应用系 ...

  6. uCos临界区保护

    定义有三种method,stm32f4采用的是第三种:将当前中断的状态标志保存在一个局部变量cpu_sr中,然后再关闭中断.cpu_sr是一个局部变量,存在于所有需要关中断的函数中.注意到,在使用了该 ...

  7. kafka 查询 SQL Query

    . SELECT COUNT(*) FROM wiseweb_crawler_foreignmedias WHERE site_id= AND (gathertime BETWEEN '2017-05 ...

  8. 简单的JDBC封装

    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...

  9. Python里的一些注释规范

    写代码注释是一件很重要的事情,如果你写的一段函数给别人调用那么往往都需要配上一些基本的注释.写好代码可以让别人容易阅读你的代码.试想一 下:如果你在github上面找到一段你想要的代码,这段代码有20 ...

  10. 命令行 sql 将结果导出到文件

    1. into outfile filename; Mysql查询结果导出为Excel的几种方法 mysql> use world; # 使用 mysql 自带的 world 数据库 mysql ...