題意:找到乙個最小邊長,使得以此為邊長$3$個正方形可以覆蓋平面上給定的一些點。
華麗爆零……
首先看到最小果斷想二分答案……
然後我們證明乙個東西……
首先,根據鴿巢原理,$3$個正方形覆蓋由所有點構成的最小矩形一定有乙個正方形是壓著至少兩條邊的……
然後不外乎兩種情況……
1、壓的是對邊,那麼每個都在壓對邊,有乙個正方形會壓到三條邊,就會壓到乙個角……
2、壓的是鄰邊,一定會壓到乙個角……
問題得解……
1 #include2 #include3 #include4 #include5bzoj1052using
namespace
std;
6const
int maxn=(int)1e6+5;7
int x[maxn],y[maxn],n,ax[4],ay[4],ajia[4],ajian[4];bool vis[maxn],now[4][maxn];int titai[3]=;
8bool dfs(int num,int
val)916
int maxx=-2147483647,minx=2147483647,maxy=-2147483647,miny=2147483647;17
for(int i=1;i<=n;i++)
18if(!vis[i])maxx=max(maxx,x[i]),minx=min(minx,x[i]),maxy=max(maxy,y[i]),miny=min(miny,y[i]);
19if(max(maxx-minx,maxy-miny)<=val)return1;
20else
if(num==3)return0;
21for(int i=1;i<=2;i++)
22for(int j=1;j<=2;j++)
2335
return0;
36}37bool check(int
val)
3841
inthaha()
4252 printf("
%d\n
",l);53}
54int sb=haha();
55int main()
bzoj1052覆蓋問題 二分 貪心
time limit 10 sec memory limit 162 mb submit 2446 solved 1131 submit status discuss 某人在山上種了n棵小樹苗。冬天來了,溫度急速下降,小樹苗脆弱得不堪一擊,於是樹主人想用一些塑料薄 膜把這些小樹遮蓋起來,經過一番長久...
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個矩形,意味著至少有乙個矩形卡住了兩個邊界,那麼...