朝比奈實 玖 瑠 ,使用tpdd進行時間穿行的未來人。
由於這項技術過於暴力 (簡單來說就是在時間平面上打洞),加之春日帶來的資訊**
使得堆疊的時間平面徹底截斷,導致實玖瑠進行穿行需要冒一定的風險。
複雜的時間穿行過程可以抽象為從平面x軸的正無窮遠處走向負無窮遠。tpdd的功率顯然是有限的,所以實玖瑠只能夠在平面y= 的直線與x軸所夾的部分裡移動。tpdd的移動方式非常的怪異,它會生成乙個直徑為 的圓來保護使用者,並且從正無窮遠處向負無窮遠處移動,直徑越大,能量越足,移動速度也就最快。但是,時間穿行的風險就在於時間平面上有許多特異點,一旦被捲入其中,就再也不能回到原來的時間點。在從正無窮遠走向負無窮遠的過程中,圓可以任意的移動,但是不能碰到特異點和越過邊界。
實玖瑠已經了解到,在她將要進行移動的部分平面上,有n個特異點,第i個點的座標是xi,yi 。為了能夠在保證安全的情況下盡快完成時間穿行,她需要設定盡量大的直徑 。
但是1096只是乙個萌物,這樣的問題對她來說太困難了,所以請你幫幫她吧!
輸入檔案共n+1行。
第一行包括兩個整數n,l 。
接下來n行,每行兩個整數xi,yi
輸出檔案僅一行,表示最大的直徑。為了防止精度誤差,請輸出保留三位小數的結果。
1 52 2
3.000
【輸入輸出樣例1說明】
顯然可以發現,從唯一乙個特異點靠l的方向可以通過直徑為3的圓
【資料規模與約定】
對於 30% 的資料,n<=3 。
對於 60% 的資料,n<=80 。
對於 100% 的資料,1<=n<=500,1<=yi
二分圓的大小,把兩點以及到邊緣小於這個距離的合併,如果上下界合併在了一起顯然就沒有路徑
code:
1 #include2 #include3 #include4 #include5#define n 100006
6using
namespace
std;
7double eps=1e-6;8
intfa[n];
9struct
node e[n];
12int
n;13
double
l;14
int find(int
x)18
void merge(int x,int
y)23}24
double sq(double
x)27
double getdis(int i,int
j)30
bool check(double
mid)
36if(e[i].y0
,i);
37if(l-e[i].y1
,i);38}
39if(find(0)==find(n+1))return
false;40
return
true;41
}42intmain()
53 printf("
%.3f
",ans);
54return0;
55 }
over
關押罪犯 並查集 二分
s 城現有兩座監獄,一共關押著n 名罪犯,編號分別為1 n。他們之間的關係自然也極不和諧。很多罪犯之間甚至積怨已久,如果客觀條件具備則隨時可能爆發衝突。我們用 怨氣值 乙個正整數值 來表示某兩名罪犯之間的仇恨程度,怨氣值越大,則這兩名罪犯之間的積怨越多。如果兩名怨氣值為c 的罪犯被關押在同一監獄,他...
擴散(二分答案 並查集)
乙個點每過乙個單位時間就會向四個方向擴散乙個距離,兩個點a b連通,記作e a,b 當且僅當a b的擴散區域有公共部分。連通塊的定義是塊內的任意兩個點u v都必定存在路徑e u,a0 e a0,a1 e ak,v 給定平面上的n給點,問最早什麼時刻它們形成乙個連通塊。我們可以二分答案,然後對於每個時...
poj3657 二分 並查集
二分哪一次操作是最後一次正確的操作 1即為錯誤操作。把最小值相同的詢問確定下來,可以得到乙個最小的集合,再更新這個集合的所屬,若有衝突就說明此操作有問題。include include include define maxd 1000010 define maxq 25010 using names...