牆上貼著許多形狀相同的海報、**。它們的邊都是水平和垂直的。每個矩形可能部分或全部的覆蓋了其他。所有矩形合併後的邊長稱為周長。
編寫乙個程式計算周長。
如圖1所示7個矩形。
如圖2所示,所有矩形的邊界。所有矩形頂點的座標都是整數。
輸入輸出格式
輸入格式:
輸入檔案的第一行是乙個整數\(n(0<=n<5000)\),表示有多少個矩形。接下來\(n\)行給出了每乙個矩形左下角座標和右上角座標(所有座標的數值範圍都在\(-10000\)到\(10000\)之間)。
輸出格式:
輸出檔案只有乙個正整數,表示所有矩形的周長。
解決這一類平面矩形面積/周長並的方法,還是用最經典的方法(見下)吧。
畢竟這是一道模板題。。。
大佬們都解釋了很多了,蒟蒻就不再贅述了(我才不會告訴你我不會講)
大體模板應該都差不太多:
掃瞄一次,從下往上,順便記錄路上的y軸方向的線段長,往\(ans\)中累加就好了。
第一次交的時候莫名wa最後乙個點,很是不解,翻了翻大佬的題解,才發現:
bool cmp(edge a,edge b)
這是ac時的cmp函式。
對於遇到的重合的一條上邊和一條下邊(當然不會在同乙個矩形內),我們優先處理下邊的資訊。
下面就是本蒟蒻的ac**,有什麼不當或可以改進的地方歡迎大佬來指教%%%
#include#include#include#define rg register
using namespace std;
const int maxn=5010;
const int maxm=20010;
const int inf=2147483647;
inline int read()
struct nodec[maxm<<2];
#define lson rt<<1
#define rson rt<<1|1
inline void pushup(int rt)
else if(c[rt].l==c[rt].r)
else
}inline void build(int rt,int l,int r)
inline void update(int rt,int l,int r,int v)
struct edgee[maxn<<1];
bool cmp(edge a,edge b)
int main();
e[++tot]=(edge);
} sort(e+1,e+tot+1,cmp);
long long ans=0,last=0;
build(1,maxl,maxr-1);
for(rg int i=1;i<=tot;i++)
printf("%lld\n",ans);
return 0;
}
完結撒花 \(qwq\) 題解 USACO5 5 貳五語言Two Five
一道記憶化搜尋題 題目定義一類行列均單調遞增的 5 times5 矩陣,將其展開後所形成的字串按字典序編號.題目要求實現編號與字串的相互轉換 先不管字串與編號的相互轉換 給你一些限定條件 形如 x,y 處只能填某字元 讓你求滿足條件的合法矩陣數 1 暴搜 有兩種思路,一種是按順序搜每乙個格仔放哪乙個...
USACO 5 5 1 求矩形並的周長
首先將矩形離散化成一系列線段,這裡以橫邊為例,我們將橫邊離散化之後按照縱座標排序,縱座標相同的時候始邊在前。然後對於乙個線段,對應區間的pos j 如果pos j 由0 1 或者由 1 0那麼ans 這個過程還可以使用線段樹優化,如下 id m1500293 lang c prog picture ...
矩形周長並
例題 hdu1828 題意 裸題 include using namespace std define lson rt 1 define rson rt 1 1 const int maxn 10005 const int inf 1e9 7 struct node node int x1,int ...