題目描述
wlp同學最近迷上了一款網路聯機對戰遊戲(終於知道為毛johnkram每天刷洛谷效率那麼低了),但是他卻為了這個遊戲很苦惱,因為他在海邊的造船廠和倉庫總是被敵方派人偷襲。於是,wlp動用了他那豐滿且充實的大腦(或許更偏向前者),想出了乙個好主意,他把海灘分成垂直於海岸線的若干列,在其中的幾列上放置幾個訊號塔,試圖來監視整個海灘。然而,wlp是乙個非常心急的人,他把訊號塔建好後才發現還需給訊號塔供能,它們才能投入使用(這不是廢話麼),它們都有乙個工作半徑,乙個圓形區域裡的所有敵人都逃不過它們的監視,不過,wlp發現,敵人們非常狡猾,除非他將道路完全封死,否則wlp的敵人可以走過一條任意彎曲的路(不一定走整點,但是不會出第0列和第n列構成的邊界)來偷他的東西。
於是,wlp就思考了:到底需要給每個訊號塔多大的工作半徑,才能將從海灘到內地的路徑完全封死呢?他再次動用了他那豐滿且充實的大腦,想了一堂數學課,終於,還是沒想出來。於是,他向lzz神犇求助(額……c_sunshine的身份是不是暴露了)。
終於,在wlp:「%^!*@#!*(*^!*#@$^&(此處省略無數賣萌場景)」的哀求下,lzz神犇寫了乙個程式,在1s內就解決了問題。但是,**的lzz神犇決定要將這個難題共享給無數無辜的oier,所以,現在輪到你了。
輸入格式:
第一行兩個整數n和m:表示海灘被wlp分成的列數0-n和訊號塔個數。
第2-m+1行:每行兩個數xi,yi表示1-m號訊號塔所在的列數和離開海灘的距離。
輸出格式:
一行乙個實數,表示最小的工作半徑,保留兩位小數。
輸入樣例#1:
【輸入樣例1】5 51 5
3 55 5
4 30
2 15
【輸入樣例2】
100 2
30 50
90 100
輸出樣例#1:
【輸出樣例1】1.00
【輸出樣例2】
39.05
對於10%的資料:1≤m≤10,1≤yi≤100;
對於30%的資料:1≤m≤50,1≤yi≤1,000;
對於80%的資料:1≤m≤500,1≤yi≤1,000;
對於100%的資料:1≤m≤800,1≤n≤1000,1≤xi≤n,1≤yi≤100,000.
【樣例解釋】
注意,封鎖海灘是指,敵人的深入程度是有限制的,若敵人繞過了所有的訊號塔,並且可以長驅直入,那麼就說明道路沒有完全封鎖。
//居然是 最小生成樹
#include#include
#include
#include
#include
using
namespace
std;
#define maxn 805
intn,m,fa[maxn],x[maxn],y[maxn],tot;
struct
edgee[maxn*maxn];
float getdist(int u,int
v)int find(int
x)bool
cmp(edge a,edge b)
intmain()
;
for(int i=1;i<=n;i++);
e[++tot]=(edge);
}sort(e+1,e+tot+1
,cmp);
memset(fa,-1,sizeof
(fa));
int cur=0
;
while(find(0)!=find(n+1
)) printf(
"%.2f\n
",e[cur].value);
return0;
}
P1783 海灘防禦 最短路
題意 題目的意思就是要建立一道防線,從x 0,鏈結到x n 題目會給出m個哨點,每個哨點可以包含半徑為k的範圍,通過這些哨點來建立防線 如圖,建立類似這樣的一條防線,那麼我們就是要從左邊建到右邊,找一條最短路 思路 假如我們單獨處理題目中給出的哨點的話,那麼兩岸還沒處理到,所以我們增加m 1 設立在...
題解 洛谷 1783 海灘防禦
題目描述 wlp同學最近迷上了一款網路聯機對戰遊戲 終於知道為毛johnkram每天刷洛谷效率那麼低了 但是他卻為了這個遊戲很苦惱,因為他在海邊的造船廠和倉庫總是被敵方派人偷襲。於是,wlp動用了他那豐滿且充實的大腦 或許更偏向前者 想出了乙個好主意,他把海灘分成垂直於海岸線的若干列,在其中的幾列上...
洛谷 1783 海灘防禦 題解
部落格觀賞效果更佳 平面直角座標系上有m 800 m 800 m 8 00 個點,每個點的x xx座標都在 1,n 1,n 1,n 之內,n 1000 n 1000 n 1 000,y yy座標 1 e5 1e5 1 e5。每個點珂以設乙個半徑為r rr的攻擊塔 攻擊範圍包含邊界 x xx軸上 1,...