bzoj_3210_花神的澆花集會_切比雪夫距離
在花老師的指導下,每週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)轉化為曼哈頓距離求解。
如果是曼哈頓距離就可以把橫縱座標分開來求。
可以用數學方法證明排序後中位數最優。
但有可能答案(x,y)不能用原來座標為整數的點表示。
出現這種情況需要用(x,y-1),(x,y+1),(x-1,y),(x+1,y)幾個點帶進去取個min。
**:
#include #include #include using namespace std;#define n 100050
typedef long long ll;
int xx[n],yy[n],n;
ll ans;
int fabs(int x)
ll solve(int x,int y)
int main()
sort(xx+1,xx+n+1);
sort(yy+1,yy+n+1);
x=xx[n+1>>1],y=yy[n+1>>1];
if(x%2==y%2) printf("%lld\n",solve(x,y));
else printf("%lld\n",min(solve(x-1,y),min(solve(x+1,y),min(solve(x,y-1),solve(x,y+1)))));
}
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...