題解 洛谷 1783 海灘防禦

2021-08-09 07:49:50 字數 1746 閱讀 5181

題目描述

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 5

1 5

3 5

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

【樣例解釋】

注意,封鎖海灘是指,敵人的深入程度是有限制的,若敵人繞過了所有的訊號塔,並且可以長驅直入,那麼就說明道路沒有完全封鎖。

題意概要

好像題面說得很清楚,就是說要保證敵人不能穿越訊號塔所監控的範圍思路

把題面概括一下

得訊號塔要組成一條封鎖線

得訊號塔的監控範圍(比學校的監控系統還大)可以連起左右兩邊的邊界

得訊號塔之間的連線會連起整個地球(生成樹?)

再來看看資料範圍,n<=1000,一看十有**是o(n^2)的複雜度

最終就像kruscarl一樣把所有小邊連起來,不過在此之前,要將左邊界和右邊界濃縮成一點,所有訊號塔與邊界間的距離是x座標絕對值,訊號塔間的距離就是曼哈頓距離,一旦並查集查到左右邊界聯通,馬上結束迴圈,輸出當前值

雖說單個資料是o(n^2)的複雜度,有t組資料,n<=1000,t<=800的資料還是要卡卡常的,但是不用卡得太厲害了,畢竟出題人良心,並且洛谷資料水,迴圈很快就可以彈出來,放心ac

突然間發現自己開始將做題中心從"普及+ 提高"轉到"提高+ 弱省省選"了

算是乙個oi生涯的一條小分界線吧

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

洛谷 P1783 海灘防禦

題目描述 wlp同學最近迷上了一款網路聯機對戰遊戲 終於知道為毛johnkram每天刷洛谷效率那麼低了 但是他卻為了這個遊戲很苦惱,因為他在海邊的造船廠和倉庫總是被敵方派人偷襲。於是,wlp動用了他那豐滿且充實的大腦 或許更偏向前者 想出了乙個好主意,他把海灘分成垂直於海岸線的若干列,在其中的幾列上...

P1783 海灘防禦 最短路

題意 題目的意思就是要建立一道防線,從x 0,鏈結到x n 題目會給出m個哨點,每個哨點可以包含半徑為k的範圍,通過這些哨點來建立防線 如圖,建立類似這樣的一條防線,那麼我們就是要從左邊建到右邊,找一條最短路 思路 假如我們單獨處理題目中給出的哨點的話,那麼兩岸還沒處理到,所以我們增加m 1 設立在...