題目描述
在花老師的指導下,每週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題解
數論題目所求的是切比雪夫距離,我們可以將點$(x,y)$旋轉為點$(x+y,x-y)$,這樣原圖中的切比雪夫距離就變為了新圖中的曼哈頓距離。
然後橫縱座標分開處理,即求使$|x-p_1|+|x-p_2|+...+|x-p_n|$最小的x,由數論知識可知$x$為$p_1,p_2,...,p_n$的中位數。
最後得到乙個新圖中的點$(x,y)$,如果這個點合法即為答案,如果不合法(即沒有原圖中合法的點旋轉後得到它,即x與y的奇偶性不同),則需要嘗試其相鄰的4個點,取距離最小值即為答案。
#include #include #include #define n 100010using namespace std;
typedef long long ll;
int n , px[n] , py[n];
ll solve(int x , int y)
int main()
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...