最小化\(l\),使\(3\)個\(l×l\)的正方形能覆蓋圖上\(n\)個點。
首先肯定要二分答案,\(l\)是算不出來的。
然後構建乙個覆蓋所有點的最小矩形。
注意到每條邊至少要乙個正方形靠著。
但現在只有\(3\)個正方形,意味著至少有乙個正方形靠著兩條邊。
靠著相對的兩條邊?那說明這個圖被這\(3\)個正方形併排著覆蓋。
即一定存在靠著相鄰兩條邊(在四角)的正方形。
可以把四種情況都試一遍。
用\(1\)個覆蓋之後又可以重複上面的步驟,以此類推。
然而我因為各種愚蠢錯誤\(wa\)了一版,如開全域性變數(開區域性才能保證互不影響)、打錯條件與數字。。。
複雜度上限\(o(4^3nlogn)\)
#include#include#include#include#include#include#define re register
#define il inline
#define ll long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define fp(i,a,b) for(re int i=a;i<=b;i++)
#define fq(i,a,b) for(re int i=a;i>=b;i--)
using namespace std;
const int n=2e4+100;
int n,x[n],y[n];
bool vis[n];
il ll gi()
il int solve(re ll l,re ll r,re ll u,re ll d,re int t,re ll l)
;fp(i,1,n) viss[i]=vis[i];
re int flag=1;
fp(i,1,n) if(!vis[i]) flag=0;
if(flag) return 1;
else if(t>3) return 0;
}int main()
printf("%lld\n",ans);
return 0;
}
HAOI2007 上公升序列
最長上公升子串行有兩種遞推方式。1 f i 表示以第 i 個數結尾的最長上公升子串行長度。2 f i 表示以第 i 個數開始的最長上公升子串行長度。對於本題,要特別注意對字典序最小的規定。我一開始以為是得到的數字序列的字典序最小,還記錄了前驅和一大堆東西,然而全wa了。後來才發現字典序最小是對應的下...
HAOI2007 修築綠化帶
haoi2007 修築綠化帶 時間限制 1 s 記憶體限制 128 mb 問題描述 為了增添公園的景致,現在需要在公園中修築乙個花壇,同時在畫壇四周修建一片綠化帶,讓花壇被綠化帶圍起來。如果把公園看成乙個m n的矩形,那麼花壇可以看成乙個c d的矩形,綠化帶和花壇一起可以看成乙個a b的矩形。如果將...
HAOI2007 修築綠化帶
問題描述 為了增添公園的景致,現在需要在公園中修築乙個花壇,同時在畫壇四周修建一片綠化帶,讓花壇被綠化帶圍起來。如果把公園看成乙個m n的矩形,那麼花壇可以看成乙個c d的矩形,綠化帶和花壇一起可以看成乙個a b的矩形。如果將花園中的每一塊土地的 肥沃度 定義為該塊土地上每乙個小塊肥沃度之和,那麼,...