Bzoj3170: [Tjoi2013]松鼠聚会 (切比雪夫距离)
题目链接
显然,题目要求我们求切比雪夫距离,不会的可以去看一下attack的博客。
考虑枚举所有的点
转换为曼哈顿距离后.
那么对于这个点的路程和是。
\]
考虑是绝对值.
将横纵坐标\(sort\)一下,\(lower_bound\)查询即可
接下来就简单多了
分情况讨论即可.
然后我只是化简了一下式子.
需要注意的是.由于转化为曼哈顿距离除以二时会有精度问题,所以这里先不除以二,最后的答案才除以二.
#include <iostream>
#include <algorithm>
#include <cstdio>
#define ll long long
const int maxN = 100000 + 7;
using namespace std;
ll x[maxN],y[maxN],n;
ll std_x[maxN],std_y[maxN];
ll sum_x[maxN],sum_y[maxN];
void Sub2() {
ll ans = 1e18;
for(int i = 1;i <= n;++ i) {
x[i] = std_x[i];
y[i] = std_y[i];
}
sort(x + 1,x + n + 1);
sort(y + 1,y + n + 1);
for(int i = 1;i <= n;++ i) sum_x[i] = sum_x[i - 1] + x[i];
for(int i = 1;i <= n;++ i) sum_y[i] = sum_y[i - 1] + y[i];
for(int i = 1;i <= n;++ i) {
ll sum = 0;
ll pos_x = lower_bound(x + 1,x + n + 1,std_x[i]) - x;
ll pos_y = lower_bound(y + 1,y + n + 1,std_y[i]) - y;
sum = (2 * pos_x - n) * x[pos_x] - 2 * sum_x[pos_x] + sum_x[n] +
(2 * pos_y - n) * y[pos_y] - 2 * sum_y[pos_y] + sum_y[n];
ans = min(ans,sum);
}
printf("%lld", ans / 2);
return ;
}
int main() {
scanf("%lld",&n);
ll g,z;
for(int i = 1;i <= n;++ i) {
scanf("%lld%lld",&g,&z);
std_x[i] = g + z;
std_y[i] = g - z;
}
Sub2();
return 0;
}
Bzoj3170: [Tjoi2013]松鼠聚会 (切比雪夫距离)的更多相关文章
- BZOJ3170: [Tjoi2013]松鼠聚会(切比雪夫距离转曼哈顿距离)
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1524 Solved: 803[Submit][Status][Discuss] Descripti ...
- BZOJ3170 [Tjoi2013]松鼠聚会 切比雪夫距离 - 曼哈顿距离 - 前缀和
BZOJ3170 题意: 有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点,距离为1.现在N个松鼠要走到一个松鼠家去,求走过的最 ...
- BZOJ.3170.[TJOI2013]松鼠聚会(切比雪夫距离转曼哈顿距离)
题目链接 将原坐标系每个点的坐标\((x,y)\)变为\((x+y,x-y)\),则原坐标系中的曼哈顿距离等于新坐标系中的切比雪夫距离. 反过来,将原坐标系每个点的坐标\((x,y)\)变为\((\f ...
- [TJOI2013]松鼠聚会 曼哈顿距离
[TJOI2013]松鼠聚会 luogu P3964 首先容易得到两点间距离是\(max(|x_1-x_2|, |y_1-y_2|)\)(即切比雪夫距离) 然后有个套路:原\((x,y)\)求曼哈顿距 ...
- BZOJ 3170: [Tjoi 2013]松鼠聚会 切比雪夫距离
3170: [Tjoi 2013]松鼠聚会 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- BZOJ 3170 松鼠聚会(切比雪夫距离转曼哈顿距离)
题意 有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点,距离为1.现在N个松鼠要走到一个松鼠家去,求走过的最短距离. 思路 题目 ...
- BZOJ3170: [Tjoi2013]松鼠聚会
[传送门:BZOJ3170] 简要题意: 给出n个点的坐标,规定两个点的距离=max(|x1-x2|,|y1-y2|) 要求选出一个点,使得这个点到所有点的距离和最小 题解: 切比雪夫转换例题 将一个 ...
- BZOJ3170: [Tjoi2013]松鼠聚会 - 暴力
描述 有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点,距离为1.现在N个松鼠要走到一个松鼠家去,求走过的最短距离. 题解 简直 ...
- BZOJ_3170_[Tjoi2013]松鼠聚会_切比雪夫距离+前缀和
BZOJ_3170_[Tjoi2013]松鼠聚会_切比雪夫距离+前缀和 题意:有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点, ...
随机推荐
- 【书评】【不推荐】《TensorFlow:实战Google深度学习框架》(第2版)
参考书 <TensorFlow:实战Google深度学习框架>(第2版) 这本书我老老实实从头到尾看了一遍(实际上是看到第9章,刚看完,后面的实在看不下去了,但还是会坚持看的),所有的代码 ...
- C#Sqlite增删改查
说到使用数据库的话,无非也就是对数据的增加,删除和修改以及查询.前文已经 创建好了程序,现在我们就可以来具体实现Sqlite的数据操作,增删改查. 第一步,创建连接字符串来连接数据库: private ...
- pycharm 中切换虚拟环境
在pycharm上创建虚拟环境,网上的资料非常多. 如果pycharm上有多个项目,如何切换每个项目的虚拟环境? cmd 命令进入虚拟环境所在的文件夹(Pycharm在每创建一个新项目时就会创建一个虚 ...
- 下载devc++和codeblocks记录
dev的安装包自己百度网盘里有 codeblocks官网 下载好后再解压即可,如果不是默认路径安装的话,还会出现检测不到编译器路径问题,解决办法在这.
- JAVA 7新特性——在单个catch代码块中捕获多个异常,以及用升级版的类型检查重新抛出异常
在Java 7中,catch代码块得到了升级,用以在单个catch块中处理多个异常.如果你要捕获多个异常并且它们包含相似的代码,使用这一特性将会减少代码重复度.下面用一个例子来理解. Java 7之前 ...
- B.小A与任务
链接:https://ac.nowcoder.com/acm/contest/369/B 题意: 小A手头有 n 份任务,他可以以任意顺序完成这些任务,只有完成当前的任务后,他才能做下一个任务 第 i ...
- python之错题巩固
.#把班级学⽣数学考试成绩录⼊到⼀个列表中: 并求平均值. 要求: 录⼊的时候 # 要带着⼈名录⼊, 例如: 张三_44 li = [] : str_input = input('请输入你的姓名和分数 ...
- python学习之队列
import queue task_queue = queue.Queue() #创建队列
- 17995 Stupid thief 组合数学
17995 Stupid thief 时间限制:1000MS 内存限制:65535K提交次数:0 通过次数:0 题型: 编程题 语言: 不限定 Description A stupid thie ...
- Chess 模拟
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6114 Problem Description 車是中国象棋中的一种棋子,它能攻击同一行或同一列中没有其他棋 ...