某人在山上種了n棵小樹苗。冬天來了,溫度急速下降,小樹苗脆弱得不堪一擊,於是樹主人想用一些塑料薄膜把這些小樹遮蓋起來,經過一番長久的思考,他決定用3個l*l的正方形塑料薄膜將小樹遮起來。我們不妨將山建立乙個平面直角座標系,設第i棵小樹的座標為(xi,yi),3個l*l的正方形的邊要求平行與座標軸,乙個點如果在正方形的邊界上,也算作被覆蓋。當然,我們希望塑料薄膜面積越小越好,即求l最小值。
第一行有乙個正整數n,表示有多少棵樹。接下來有n行,第i+1行有2個整數xi,yi,表示第i棵樹的座標,保證不會有2個樹的座標相同。
一行,輸出最小的l值。 4
0 10 -1
1 0-1 0
1100%的資料,n<=20000
題解:首先用一塊大布把全部點罩住(正好罩住),那麼三塊布中的一塊必定要與四個角中的乙個重合。
選擇邊長用二分。
#include#include#include#include#include#include#include#include#includeusing namespace std;
struct comb;
void _solve(comb &a,int _step,int mid);
void _cut(comb&a,int x1,int x2,int y1,int y2);
bool panduan(int mid,comb& a);
int main()
int l=1,r=999999999,mid;
while(l>1;
if(panduan(mid,a))r=mid;
else l=mid+1;
} cout} a.num=tot;
}bool panduan(int mid,comb& a)
if(x2-x1<=mid&&y2-y1<=mid)return true;
} }return false;
}
bzoj1052 HAOI2007 覆蓋問題
一道簡單的二分 貪心,先找四個最大最小座標,以四個角中的乙個為左上角劃正方形,再找再劃,最後判斷剩下的點是否在乙個正方形內。ac code include include include include define ll long long using namespace std const ll...
BZOJ1052 HAOI2007 覆蓋問題
bzoj 洛谷二分答案是顯然的。算一下包含所有的點的最小矩形的範圍 x1,y1 x2,y2 貪心思考一下肯定是把塑料薄膜其中乙個角放在此矩形上的 然後 dfs 判一下即可 include include include include include include using namespace ...
HAOI2007 覆蓋問題
最小化 l 使 3 個 l l 的正方形能覆蓋圖上 n 個點。首先肯定要二分答案,l 是算不出來的。然後構建乙個覆蓋所有點的最小矩形。注意到每條邊至少要乙個正方形靠著。但現在只有 3 個正方形,意味著至少有乙個正方形靠著兩條邊。靠著相對的兩條邊?那說明這個圖被這 3 個正方形併排著覆蓋。即一定存在靠...