USACO5 5 矩形周長Picture

2022-05-02 02:45:09 字數 1654 閱讀 9871

牆上貼著許多形狀相同的海報、**。它們的邊都是水平和垂直的。每個矩形可能部分或全部的覆蓋了其他。所有矩形合併後的邊長稱為周長。

編寫乙個程式計算周長。

如圖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 ...