松鼠的聚會

2022-08-18 23:03:19 字數 1620 閱讀 2426

有若干只松鼠住在可視為笛卡爾座標系的草原上,它們想選定其中乙隻的家作為目的地去參加聚會,並且不希望走太長距離,請你求出最小距離.值得注意的是,乙個點到其周圍八個點距離均為$ 1 $.

此題我們不難發現,任意兩點間的距離為兩點間橫縱座標差的絕對值的較大值,我們一般將這種距離叫做切比雪夫距離.其實,笛卡爾座標系上兩點\(p_(x_,y_),p_(x_,y_)\),一共有三種距離,下面一一介紹.

第一種是我們最熟悉的笛卡爾距離,其表示式為\(|p_p_|=\sqrt-x_)^+(y_-y_)^}\)

第二種叫做曼哈頓距離,其表示式為\(|p_p_|=|x_-x_|+|y_-y_|\)

第三種比較少見,叫做切比雪夫距離,即本題要用到的.表示式如下:\(|p_p_|=max(|x_-x_|,|y_-y_|)\)

特別的是,曼哈頓距離和切比雪夫距離可以互相轉換.我們考慮最簡單的情況,在乙個二維座標系中,設原點為(0,0)(0,0),如果用曼哈頓距離表示,則與原點距離為11的點會構成乙個邊長為11的正方形.

如果用切比雪夫距離表示,則與原點距離為11的點會構成乙個邊長為22的正方形

第二個影象是由第乙個影象放大兩倍後旋轉45°得到的.根據一堆神奇的性質我們可以\(yy\)出來,將圖一中的點\((x,y)\)對應圖二中的點\((\frac,\frac)\),那麼就可進行互化了.

於是乎我們可以將本題轉化為曼哈頓距離,即求\(max_^ \|x_-x_| +\sum_|y_-y_| \}\),去括號後利用字首和維護,二分查詢答案即可實現\(\omicron(\log n)\)一次查詢.

#include#include#include#include#include#include#include#define r register

#define next mablcdg

#define mod 1

#define debug puts("mlg")

#define mod(x) ((x%mod+mod)%mod)

using namespace std;

typedef long long ll;

typedef long double ld;

typedef unsigned long long ull;

inline ll read();

inline void write(ll x);

inline void writesp(ll x);

inline void writeln(ll x);

const ll maxn=310000;

ll n;

struct nodev[maxn];

ll sx[maxn],sy[maxn],lshx[maxn],lshy[maxn];

ll ans;

int main()

writeln(ans>>1);

}inline ll read()while(ch>='0'&&ch<='9')return x*t;}

inline void write(ll x)if(x<=9)write(x/10);putchar(x%10+'0');}

inline void writesp(ll x)

inline void writeln(ll x)

TJOI2013 松鼠聚會

題目描述 草原上住著一群小松鼠,每個小松鼠都有乙個家。時間長了,大家覺得應該聚一聚。但是草原非常大,松鼠們都很頭疼應該在誰家聚會才最合理。每個小松鼠的家可以用乙個點x,y表示,兩個點的距離定義為點 x,y 和它周圍的8個點 x 1,y x 1,y x,y 1 x,y 1 x 1,y 1 x 1,y ...

洛谷3964 松鼠聚會

p3964 首先學習一下曼哈頓距離和切比雪夫距離即二者之間的轉換。那根據切比雪夫距離的定義,只要x,y這個點到它周圍八個點的距離都是一的話,就是使用的切比雪夫距離。對於給出的n個點,選擇其中乙個點並計算它到其他點的距離的話,由於切比雪夫距離定義為 d max x1 x2 y1 y2 計算所有點到當前...

bzoj3170 松鼠聚會

這個距離就是切比雪夫距離,有乙個神奇的東西是說將 x,y 變成 x y,x y 然後就是曼哈頓距離,因此轉化後對x座標和y座標分別統計排序和求和 求字首和預處理 二分 1 include2 using namespace std 3 define n 100005 4struct jia n 7in...