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个点即上下左右四个点和对角的四个点, ...
随机推荐
- 【BZOJ1855】[Scoi2010] 股票交易
→BZOJ任意门← 很显然的动态规划题(笑) 容易想到DP的数组 f[i][j] 表示第i天手上有j股股票时能赚到最多的钱. 接下来就是转移了,有这么多变量一定要看清楚,仔细地分情况讨论. 每次转移时 ...
- File upload in ASP.NET Core web API
参考1:File upload in ASP.NET Core web API https://www.janaks.com.np/file-upload-asp-net-core-web-api/ ...
- hdu 2108 Shape of HDU(判定是不是凸多边形)
#include <iostream> #include <algorithm> #include <cstring> #include <cstdio> ...
- mysql 安装和修改编码(utf8mb4)
安装mysql(linux 我的环境centos 7) 安装MySQL官方的Yum Repository wget -i -c http://dev.mysql.com/get/mysql57-com ...
- SpringBoot | 集成Redis
Windows下安装: https://github.com/MicrosoftArchive/redis/releases zip下就解包到自定义目录下,msi就跟着步骤安装 进入安装目录下运行命令 ...
- [题解](次短路)luogu_P2865路障(未)
好像是个不需要vis数组的次短路,跑到收敛,然而给我脑袋弄炸了......到现在还没懂.......究竟次短路应该怎么求a...... 抄题解: #include<bits/stdc++.h&g ...
- HTML--使用重置按钮,重置表单信息
当用户需要重置表单信息到初始时的状态时,比如用户输入“用户名”后,发现书写有误,可以使用重置按钮使输入框恢复到初始状态.只需要把type设置为"reset"就可以. 语法: < ...
- Codeforces 1142C(转化、凸包)
可以变换坐标:x' = x, y' = y - x ^ 2,如此之后可得线性函数x' * b + c = y',可以发现两点连边为抛物线,而其他点都在这条线下方才满足题意,故而求一个上凸壳即可. #i ...
- python入门之排序,文件操作
排序 li.sort() 对li列表从小到大排序,直接更新li列表 sorted(li) 返回一个li排序后的列表,并非直接对li作更新 列表元素必须是同一种数据类型 文件操作 打开文件: f = o ...
- Android studio 断点调试
最近进行业务测试,总是被测试环境不稳定或者测试数据错误困扰,一有问题就去找开发,自己都觉得很烦,所以就自己学着调试起来,这样以后遇到问题就可以自己定位的更深入了. 1.确保连接设备且进 ...