BZOJ3210 花神的澆花集會

2022-05-03 23:36:15 字數 1859 閱讀 8302

在花老師的指導下,每週4都有乙個集會活動,俗稱「澆水」活動。

具體澆水活動詳情請見bzoj3153

但這不是重點

花神為了準備澆花集會的題,必須找一道盡量適合所有人的題

現在花神知道每個人的**能力x和演算法能力y,一道題(**難度x演算法難度y)對這個人的不適合度為    max ( abs ( x – x ) , abs ( y – y ) )

也就是說無論太難還是太簡單都會導致題目不適合做(如果全按花神本人能力設題,絕對的全場爆0的節奏,太簡單,則體現不出花神的實力)

當然不是每次都如花神所願,不一定有一道題適合所有人,所以要使所有人的不合適度總和盡可能低

花神出了100001*100001道題,每道題的**難度和演算法難度都為0,1,2,3,……,100000

第一行乙個正整數n,表示花神有n個學生,花神要為這n個學生選一道題

接下來n行,每行兩個空格隔開的整數x[i],y[i],表示這個學生的**能力和演算法能力

乙個整數,表示最小的不合適度總和

31 2

2 13 3

3對於100%的資料,n<=100000,0<=x[i],y[i]<=100000

將(x,y)轉化成(x+y,x-y)可以將切比雪夫距離轉化成曼哈頓距離(自己推一推),a、b的切比雪夫距離就是a`、b`曼哈頓距離的一半。

那麼可以將x、y分離處理,排序中位數即可。注意如果最後選的最優的x、y代回去不是整數,要在其上下左右中選個最優方案。

還有就是這道題不知道怎麼io優化就是用不了。

#include#include

#include

#include

#include

#include

#define rep(i,s,t) for(int i=s;i<=t;i++)

#define dwn(i,s,t) for(int i=s;i>=t;i--)

#define ren for(int i=first[x];i;i=next[i])

using

namespace

std;

const

int buffersize=1

<<16

;char buffer[buffersize],*head,*tail;

inline

char

getchar()

return *head++;

}inline

intread()

typedef

long

long

ll;const

int maxn=100010

;int

n,x[maxn],y[maxn];

ll solve(

int x,int

y) int

main()

sort(x+1,x+n+1);sort(y+1,y+n+1

);

int x=x[n+1>>1],y=y[n+1>>1

];

if(~(x^y)&1) printf("

%lld\n

",solve(x,y)/2

);

else printf("

%lld\n

",min(min(solve(x-1,y),solve(x,y-1)),min(solve(x+1,y),solve(x,y+1)))/2

);

return0;

}

view code

bzoj3210 花神的澆花集會

給你n個點,要你求乙個點,橫縱座標是範圍在0到100000之間的整數,使得該點到所有給定的點的切比雪夫距離最小。n 100000 0 座標範圍 100000 首先兩個點 x1,y1 x2,y2 的切比雪夫距離為ma x x 1 x2 y 1 y2 然後把每個點的座標變成 x y,x y 兩個點切比雪...

bzoj 3210 花神的澆花集會

題意 平面上n個點求一點使所有點到它的切比雪夫距離最小。題解 先把切比雪夫距離轉化成曼哈頓距離 把 x,y 變為 x y,x y 新點間的曼哈頓距離的一半就是原點的切比雪夫距離。曼哈頓距離的兩維沒有聯絡,所以最小的點的橫座標和縱座標可以分開求。很明顯,要使絕對值的和最小,點肯定在中位數上。但是因為x...

bzoj3210 花神的澆花集會

根據網上題解可得 qaq。把座標變成 x y,x y 後,原本的切比雪夫距離就是現在的曼哈頓距離的一半。似乎金組題裡也有道一模一樣的。分別求出橫縱座標的中位數。但如果所取的點的x y奇偶性不同。那在原圖裡是沒有對應點的。所以可能要再試一下旁邊的四個點 1 include2 include3 incl...