您的位置:首页 > 其它

[bzoj3210] 花神的浇花集会

2016-03-21 14:12 375 查看
  根据网上题解可得(QAQ。。把坐标变成(x-y,x+y)后,原本的切比雪夫距离就是现在的曼哈顿距离的一半。。

  似乎金组题里也有道一模一样的。

  分别求出横纵坐标的中位数。。但如果所取的点的x、y奇偶性不同。。那在原图里是没有对应点的。

  所以可能要再试一下旁边的四个点

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#define ll long long
using namespace std;
const int maxn=100233;
int x[maxn],y[maxn];
int i,j,k,n,m;
ll ans;
int ra;char rx;
inline int read(){
rx=getchar(),ra=0;
while(rx<'0'||rx>'9')rx=getchar();
while(rx>='0'&&rx<='9')ra*=10,ra+=rx-48,rx=getchar();return ra;
}
inline ll get(int a,int b){
ll sm=0;
for(int i=1;i<=n;i++)
sm+=abs(a-x[i])+abs(b-y[i]);
return sm;
}
int main(){
n=read();
for(i=1;i<=n;i++)j=read(),k=read(),x[i]=j+k,y[i]=j-k;
sort(x+1,x+1+n),sort(y+1,y+1+n);
int mx=x[(1+n)>>1],my=y[(1+n)>>1];
if((mx^my)&1)
ans=min(get(mx-1,my),min(get(mx+1,my),min(get(mx,my-1),get(mx,my+1))));
else ans=get(mx,my);
printf("%lld\n",ans>>1);
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: