【bzoj3210】花神的浇花集会
将(x,y)转化成(x+y,x-y)可以将切比雪夫距离转化成曼哈顿距离(自己推一推)
A、B的切比雪夫距离就是A‘、B‘曼哈顿距离的一半。
那么可以将x、y分离处理,排序中位数即可。
注意如果最后选的最优的X、Y代回去不是整数,要在其上下左右中选个最优方案。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #include<cmath> using namespace std; typedef long long LL; #define N 100010 int n; int x,y; int X[N],Y[N]; LL check( int x, int y) { LL res(0); for ( int i=1;i<=n;i++) res+=abs(x-X[i])+abs(y-Y[i]); return res; } int main() { scanf( "%d" ,&n); for ( int i=1;i<=n;i++) { scanf( "%d%d" ,&x,&y); X[i]=x+y; Y[i]=x-y; } sort(X+1,X+n+1); sort(Y+1,Y+n+1); x=X[n+1>>1]; y=Y[n+1>>1]; if (~(x ^ y) & 1) printf( "%lld\n" ,check(x,y)>>1); else printf( "%lld\n" ,min(min(check(x+1,y),check(x-1,y)),min(check(x,y+1),check(x,y-1)))>>1); return 0; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步