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