LuoguP3964 [TJOI2013]松鼠聚会【切比雪夫距离/前缀和】
前置知识:切比雪夫距离和曼哈顿距离的相互转化--自为风月马前卒
有了这个知识,我们便可以在读入松鼠的家的坐标时,先把他转化一下,然后把最后的总式化简,我们会得到一个充满后缀和以及前缀和的式子,这里有十分详细的展开式。于是我们把$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]松鼠聚会【切比雪夫距离/前缀和】的更多相关文章
- BZOJ3170 [Tjoi2013]松鼠聚会 切比雪夫距离 - 曼哈顿距离 - 前缀和
BZOJ3170 题意: 有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点,距离为1.现在N个松鼠要走到一个松鼠家去,求走过的最 ...
- BZOJ3170: [Tjoi2013]松鼠聚会(切比雪夫距离转曼哈顿距离)
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1524 Solved: 803[Submit][Status][Discuss] Descripti ...
- BZOJ.3170.[TJOI2013]松鼠聚会(切比雪夫距离转曼哈顿距离)
题目链接 将原坐标系每个点的坐标\((x,y)\)变为\((x+y,x-y)\),则原坐标系中的曼哈顿距离等于新坐标系中的切比雪夫距离. 反过来,将原坐标系每个点的坐标\((x,y)\)变为\((\f ...
- Bzoj3170: [Tjoi2013]松鼠聚会 (切比雪夫距离)
题目链接 显然,题目要求我们求切比雪夫距离,不会的可以去看一下attack的博客. 考虑枚举所有的点 转换为曼哈顿距离后. 那么对于这个点的路程和是. \[\sum_{i=1}^n | x_i - x ...
- [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个松鼠要走到一个松鼠家去,求走过的最短距离. 思路 题目 ...
- luoguP3964 [TJOI2013]松鼠聚会
链接 luogu 思路 切比雪夫距离有max,不好优化. 但是我们能转化成曼哈顿距离,只需要 \((x,y)变成(\frac{x+y}{2},\frac{x-y}{2})\) 相反的曼哈顿距离转切比雪 ...
- BZOJ_3170_[Tjoi2013]松鼠聚会_切比雪夫距离+前缀和
BZOJ_3170_[Tjoi2013]松鼠聚会_切比雪夫距离+前缀和 题意:有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点, ...
随机推荐
- 数组index
1. 数组index与数组名的位置关系 a[b] = *(a + b) = *(b + a) = b[a] int a[5] = {1, 2, 3, 4, 5}; printf("% ...
- eclipse配置android
先在eclipse中安装ADT插件,install内点击add,name:ADT, URL:http://dl-ssl.google.com/android/eclipse/ 之后直接finish就好 ...
- thinkphp 防sql注入
$Model->where("id=%d and username='%s' and xx='%f'",array($id,$username,$xx))->selec ...
- ES6 中的let 声明变量
1.let是声明的是块级变量,不会污染全局,一般条件与循环中会用到: 2.let 不可以变量提升: 3.let不遵循作用域,一个作用域内如果有该变量,就不会到全局去找,也不可以在一个作用域重复声明一 ...
- POJ1759 Garland —— 二分
题目链接:http://poj.org/problem?id=1759 Garland Time Limit: 1000MS Memory Limit: 10000K Total Submissi ...
- Linux下配置rsync服务器
一.简介 rsync是一个远程数据同步工具,可以快速同步多台主机间的文件.Rsync使用所谓的“Rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都 ...
- linux初级学习笔记一:linux操作系统及常用命令,及如何获取命令的使用帮助!(视频序号:02_1,2)
本节学习的命令:ls,cd,type,pwd, printenv, hash, date, clock, man, hwclock, info, cal, echo, printf, file! 本节 ...
- codeforces 460A Vasya and Socks 解题报告
题目链接:http://codeforces.com/problemset/problem/460/A 题目意思:有一个人有 n 对袜子,每天早上会穿一对,然后当天的晚上就会扔掉,不过他会在 m 的倍 ...
- hdu 4398 Template Library Management(贪心+stl)
题意:n道题,每道题需要一个模板,现在手头有m个模板(标号1~m),解题的时候,如果没有需要的模板,可以向朋友借,但是用完之后必须在还给朋友一个模板(也就是说保持手头拥有m个模板),求解完n道题最少需 ...
- SocketErrorCode:10022
在编写.net的网络服务器时,我使用了裸socket来实现.在windows上,或者在linux上通过.net core来跑时都没有什么问题,但是通过mono运行调用socket.Bind()时却总是 ...