《模板》 矩形分割

2021-06-23 05:12:52 字數 1325 閱讀 5271

n個不同的顏色的不透明的長方形(1 <= n <= 1000)被放置在一張橫寬為a豎長為b的白紙上。這些長方形被放置時,保證了它們的邊與白紙的邊緣平行。所有的長方形都放置在白紙內,所以我們會看到不同形狀的各種顏色。座標系統的原點(0,0)設在這張白紙的左下角,而座標軸則平行於邊緣。

program name: rect1

input format:

(file rect1.in)

按順序輸入放置長方形的方法。第一行輸入的是那個放在底的長方形(即白紙)。

第 1 行: a , b 和 n由空格分開 (1 <=a, b<=10,000)

第 2 到n+1行: 為五個整數 llx, lly, urx, ury, color 這是乙個長方形的左下角座標,右上角座標(x+1,y+1)和顏色。

顏色 1和底部白紙的顏色相同。 (1 <= color <= 2500)

output format

(file rect1.out)

輸出且僅輸出所有能被看到顏色,和該顏色的總面積(可以由若干個不連通的色塊組成),按color增序排列。

20 20 3

2 2 18 18 2

0 8 19 19 3

8 0 10 19 4

1 91

2 84

3 187

4 38

插入矩形(x3,y3,x4,y4)後,對矩形(x1,y1,x2,y2)進行切割。

我們可以歸納出矩形切割的思想:

procedure cut(x1,y1,x2,y2,direction)

var k1,k2

begin

case direction of

1:begin

k1 ← max(x1,x3) {計算線段(x1,x2),(x3,x4)交集的左邊界}

k2 ← min(x2,x4) {計算線段(x1,x2),(x3,x4)交集的右邊界}

if x1#include #include #include #include #include #include #include #include #include #include #define ll __int64

using namespace std;

struct node

f[1010];

int ans[10010];

void dfs(int lx,int ly,int rx,int ry,int t)

}int main()

NOI OJ矩形分割

描述 平面上有乙個大矩形,其左下角座標 0,0 右上角座標 r,r 大矩形內部包含一些小矩形,小矩形都平行於座標軸且互不重疊。所有矩形的頂點都是整點。要求畫一根平行於y軸的直線x k k是整數 使得這些小矩形落在直線左邊的面積必須大於等於落在右邊的面積,且兩邊面積之差最小。並且,要使得大矩形在直線左...

03 矩形分割

原題鏈結 總時間限制 1000ms 記憶體限制 65536kb 描述 平面上有乙個大矩形,其左下角座標 0,0 右上角座標 r,r 大矩形內部包含一些小矩形,小矩形都平行於座標軸且互不重疊。所有矩形的頂點都是整點。要求畫一根平行於y軸的直線x k k是整數 使得這些小矩形落在直線左邊的面積必須大於等...

矩形分割(二分)

描述 平面上有乙個大矩形,其左下角座標 0,0 右上角座標 r,r 大矩形內部包含一些小矩形,小矩形都平行於座標軸且互不重疊。所有矩形的頂點都是整點。要求畫一根平行於y軸的直線x k k是整數 使得這些小矩形落在直線左邊的面積必須大於等於落在右邊的面積,且兩邊面積之差最小。並且,要使得大矩形在直線左...