bzoj 3170 Tjoi 2013 松鼠聚会 曼哈顿距离&&切比雪夫距离
2017-03-06 17:01
489 查看
因为曼哈顿距离很好求,所以要把每个点的坐标转换一下。
转自:http://blog.csdn.net/slongle_amazing/article/details/50911504
题解
两个点的切比雪夫距离为d=max(|x1−x2|,|y1−y2|)
写一下曼哈顿距离的常用处理方法
两个点(x1,y2),(x2,y2)
其曼哈顿距离=|x1−x2|+|y1−y2|
因为|x1−x2|=max(x1−x2,x2−x1)
所以可以写成=max(x1−x2+y1−y2,x1−x2+y2−y1,x2−x1+y1−y2,x2−x1+y2−y1)
=max((x1+y1)−(x2+y2),(x1−y1)−(x2−y2),−(x1−y1)+(x2−y2),−(x1+y1)+(x2+y2))
=max(|(x1+y1)−(x2+y2)|,|(x1−y1)−(x2−y2)|)
令x′=x+y,y′=x−y=max(|x′1−x′2|,|y′1−y′2|)
这样曼哈顿距离就被转化为了切比雪夫距离
同理,我们把切比雪夫距离转化为曼哈顿距离(x,y)=((x+y)/2,(x−y)/2)
就转化为了n−1个点到一个点的曼哈顿距离最小
计算曼哈顿距离x和y分开计算即可
转自:http://blog.csdn.net/slongle_amazing/article/details/50911504
题解
两个点的切比雪夫距离为d=max(|x1−x2|,|y1−y2|)
写一下曼哈顿距离的常用处理方法
两个点(x1,y2),(x2,y2)
其曼哈顿距离=|x1−x2|+|y1−y2|
因为|x1−x2|=max(x1−x2,x2−x1)
所以可以写成=max(x1−x2+y1−y2,x1−x2+y2−y1,x2−x1+y1−y2,x2−x1+y2−y1)
=max((x1+y1)−(x2+y2),(x1−y1)−(x2−y2),−(x1−y1)+(x2−y2),−(x1+y1)+(x2+y2))
=max(|(x1+y1)−(x2+y2)|,|(x1−y1)−(x2−y2)|)
令x′=x+y,y′=x−y=max(|x′1−x′2|,|y′1−y′2|)
这样曼哈顿距离就被转化为了切比雪夫距离
同理,我们把切比雪夫距离转化为曼哈顿距离(x,y)=((x+y)/2,(x−y)/2)
就转化为了n−1个点到一个点的曼哈顿距离最小
计算曼哈顿距离x和y分开计算即可
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #define ll long long #define N 100005 using namespace std; int n; struct node { int x,y,id; friend bool operator < (node aa,node bb) { return aa.x<bb.x; } }a[100005]; ll ans ,sum ; bool cmp(node aa,node bb) { return aa.y<bb.y; } int main() { scanf("%d",&n);int t1,t2; for(int i=1;i<=n;i++) { scanf("%d%d",&t1,&t2); a[i].x=t1+t2;a[i].y=t1-t2;a[i].id=i; } sort(a+1,a+n+1); for(int i=1;i<=n;i++)sum[i]=sum[i-1]+a[i].x; for(int i=1;i<=n;i++) { ans[a[i].id]+=(ll)a[i].x*(i-1)-sum[i-1]; ans[a[i].id]+=(sum -sum[i])-((ll)a[i].x*(n-i)); } sort(a+1,a+n+1,cmp); for(int i=1;i<=n;i++)sum[i]=sum[i-1]+a[i].y; for(int i=1;i<=n;i++) { ans[a[i].id]+=(ll)a[i].y*(i-1)-sum[i-1]; ans[a[i].id]+=(sum -sum[i])-((ll)a[i].y*(n-i)); } ll mx=1ll<<62; for(int i=1;i<=n;i++)mx=min(mx,ans[i]); printf("%lld\n",mx/2); return 0; }
相关文章推荐
- BZOJ 3170 [Tjoi 2013]松鼠聚会 切比雪夫距离-->曼哈顿距离
- BZOJ 3170: [Tjoi 2013]松鼠聚会(切比雪夫距离)
- BZOJ 3170: [Tjoi 2013]松鼠聚会 切比雪夫距离
- BZOJ 3170: [Tjoi 2013]松鼠聚会 切比雪夫距离
- JZOJ3256 【TJOI2013】松鼠聚会 切比雪夫距离转曼哈顿距离
- BZOJ_3170_[Tjoi2013]松鼠聚会_切比雪夫距离
- bzoj 3170: [Tjoi 2013]松鼠聚会&3210: 花神的浇花集会
- BZOJ 3170 TJOI 2013 松鼠聚会 切比雪夫距离
- BZOJ 3170([Tjoi 2013]松鼠聚会-Manhattan距离单点最近)
- BZOJ 3170([Tjoi 2013]松鼠聚会-Manhattan距离单点最近)
- 【bzoj3170】[Tjoi 2013]松鼠聚会
- [BZOJ3170] [Tjoi 2013]松鼠聚会
- bzoj-3170 3170: [Tjoi 2013]松鼠聚会(计算几何)
- bzoj3170 [Tjoi 2013]松鼠聚会
- BZOJ3170[TJOI2013]松鼠聚会
- bzoj3170&&jzoj3256 【TJOI2013】松鼠聚会 切比雪夫距离
- BZOJ 3170 [Tjoi 2013]松鼠聚会
- BZOJ3170: [Tjoi 2013]松鼠聚会
- 【TJOI2013 Day1合集】BZOJ3170 松鼠聚会 BZOJ3171 循环格 BZOJ3172 单词
- BZOJ 3170: [Tjoi 2013]松鼠聚会( sort )