洛谷 P1783 海灘防禦

2021-07-28 20:43:48 字數 1889 閱讀 7450

題目描述

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,...