[bzoj3210] 花神的浇花集会

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

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

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

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

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<algorithm>
 5 #include<cstdlib>
 6 #define ll long long
 7 using namespace std;
 8 const int maxn=100233;
 9 int x[maxn],y[maxn];
10 int i,j,k,n,m;
11 ll ans;
12 int ra;char rx;
13 inline int read(){
14     rx=getchar(),ra=0;
15     while(rx<'0'||rx>'9')rx=getchar();
16     while(rx>='0'&&rx<='9')ra*=10,ra+=rx-48,rx=getchar();return ra;
17 }
18 inline ll get(int a,int b){
19     ll sm=0;
20     for(int i=1;i<=n;i++)
21         sm+=abs(a-x[i])+abs(b-y[i]);
22     return sm;
23 }
24 int main(){
25     n=read();
26     for(i=1;i<=n;i++)j=read(),k=read(),x[i]=j+k,y[i]=j-k;
27     sort(x+1,x+1+n),sort(y+1,y+1+n);
28     int mx=x[(1+n)>>1],my=y[(1+n)>>1];
29     if((mx^my)&1)
30         ans=min(get(mx-1,my),min(get(mx+1,my),min(get(mx,my-1),get(mx,my+1))));
31     else ans=get(mx,my);
32     printf("%lld
",ans>>1);
33     return 0;
34 }
View Code
原文地址:https://www.cnblogs.com/czllgzmzl/p/5301740.html