暴搜 bzoj1052 覆蓋問題

2022-03-27 09:32:41 字數 1331 閱讀 8362

問題 b: 覆蓋問題

時間限制: 1 sec 記憶體限制: 256 mb

題目描述

description

某人在山上種了n棵小樹苗。冬天來了,溫度急速下降,小樹苗脆弱得不堪一擊,於是樹主人想用一些塑料薄

膜把這些小樹遮蓋起來,經過一番長久的思考,他決定用3個l*l的正方形塑料薄膜將小樹遮起來。我們不妨將山建

立乙個平面直角座標系,設第i棵小樹的座標為(xi,yi),3個l*l的正方形的邊要求平行與座標軸,乙個點如果在

正方形的邊界上,也算作被覆蓋。當然,我們希望塑料薄膜面積越小越好,即求l最小值。

input

第一行有乙個正整數n,表示有多少棵樹。接下來有n行,第i+1行有2個整數xi,yi,表示第i棵樹的座標,保證

不會有2個樹的座標相同。

output

一行,輸出最小的l值。

sample input

4 0 1

0 -1

1 0

-1 0

sample output

1 hint

100%的資料,n<=20000

我們對於所有點可以搞出乙個覆蓋所有點的最小矩形,那麼當前的正方形一定與其邊相連,而且一定在頂點上(不然有的點在旮旯裡覆蓋不上,一定不最優),所以列舉四個頂點,列舉三次,暴搜即可。

應該沒人想不到這是二分吧?→_→

#pragma gcc optimize("o3")

#include

#include

#include

#include

#include

#define n 20005

#define inf 100000000

#define ll long long

using

namespace

std;

int read()

while(x>='0'&&x<='9')

return sum*f;

}struct nodea[n];

int n;

bool vis[n];

ll hx=inf,hd=-inf,zx=inf,zd=-inf;

inline

bool cmp(node a,node b)

int main()

for(int i=1;i<=n;i++)a[i].x=read(),a[i].y=read();

sort(a+1,a+n+1,cmp);

for(int i=1;i<=n;i++)

cout

<}

暴搜 bzoj1052 覆蓋問題

問題 b 覆蓋問題 時間限制 1 sec 記憶體限制 256 mb 題目描述 description 某人在山上種了n棵小樹苗。冬天來了,溫度急速下降,小樹苗脆弱得不堪一擊,於是樹主人想用一些塑料薄 膜把這些小樹遮蓋起來,經過一番長久的思考,他決定用3個l l的正方形塑料薄膜將小樹遮起來。我們不妨將...

bzoj1052 覆蓋問題

先二分答案,容易發現一定有乙個正方形覆蓋在角上 即有兩條邊在最x的地方 否則4個最x的點一定無法覆蓋,然後暴力確定即可 1 include2 using namespace std 3struct ji8 a 20005 9 int n,vis 20005 10 void bj int lx,int...

BZOJ1052 覆蓋問題(貪心)

bzoj 洛谷這題好神仙啊。很明顯可以看出來要二分乙個邊長。那麼如何ch eck che ck 呢?我們把所有點用乙個最小矩形覆蓋,那麼必定每個邊界上都至少存在乙個點,但是我們有 4 4 個邊界,但是只有 3 role presentation 3 3個矩形,意味著至少有乙個矩形卡住了兩個邊界,那麼...