1. 程式人生 > >【USACO題庫】3.1.4 Shaping Regions形成的區域

【USACO題庫】3.1.4 Shaping Regions形成的區域

題目描述


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

INPUT FORMAT
每行輸入的是放置長方形的方法。
第一行輸入的是那個放在底的長方形(即白紙)。
第 1 行:A , B 和 N, 由空格分開 (1 <=A, B<=10,000)
第 2 到N+1行:為五個整數 llx, lly, urx, ury, color 這是一個長方形的左下角座標,右上角座標和顏色。
顏色 1和底部白紙的顏色相同。

SAMPLE INPUT (file rect1.in) 
20 20 3
2 2 18 18 2
0 8 19 19 3

8 0 10 19 4

OUTPUT FORMAT

輸出檔案應該包含一個所有能被看到顏色連同該顏色的總面積的清單( 即使顏色的區域不是連續的),按color的增序順序。不要顯示沒有區域的顏色。


SAMPLE OUTPUT (file rect1.out)

1 91

2 84

3 187

4 38

這道題目就是矩形切割法:假設當前上面的布已經全部布好了,現在要布的是最最下面的那張白紙,你可以把這張白紙想象成一個可以分解的果凍,每遇到一張布可以往他的上下左右四個方向去分解,而分解的座標與你當前碰到的這張布的座標相關。例如如果你當前要分解到這張布的左邊,則你分解完之後x1座標要賦值為(這張布的左邊),方便下次計算。(因為左邊你已經計算過了,當然無需再計算,也就是把它覆蓋,x1座標更新罷了),其他方向亦然。分解(走完)n個之後就可以計算面積了,這裡不一定每個布都要分解,只要當前大布不包含其即可。

程式碼:

var
        count:array[1..10000]of longint;
        a:array[0..1000,1..5]of longint;
        n,x,y,i:longint;
procedure dfs(x1,y1,x2,y2,tot:longint);
begin
        while ((x1>=a[tot,3]) or (y1>=a[tot,4]) or (x2<=a[tot,1]) or (y2<=a[tot,2])) and (tot<=n) do inc(tot);
        if tot>n then
begin inc(count[a[i,5]],(x2-x1)*(y2-y1)); exit; end; if x1<a[tot,1] then //go up begin dfs(x1,y1,a[tot,1],y2,tot+1); x1:=a[tot,1]; end; if x2>a[tot,3] then //go down begin dfs(a[tot,3],y1,x2,y2,tot+1); x2:=a[tot,3]; end; if y1<a[tot,2] then //go left begin dfs(x1,y1,x2,a[tot,2],tot+1); y1:=a[tot,2]; end; if y2>a[tot,4] then //go right begin dfs(x1,a[tot,4],x2,y2,tot+1); y2:=a[tot,4]; end; end; begin readln(x,y,n); for i:=1 to n do readln(a[i,1],a[i,2],a[i,3],a[i,4],a[i,5]); a[0,1]:=0; a[0,2]:=0; a[0,3]:=x; a[0,4]:=y; a[0,5]:=1; for i:=0 to n do dfs(a[i,1],a[i,2],a[i,3],a[i,4],i+1); for i:=1 to 1000 do if count[i]>0 then writeln(i,' ',count[i]); end.

相關推薦

USACO3.1.4 Shaping Regions形成區域

題目描述 N個不同的顏色的不透明的長方形(1 <= N <= 1000)被放置在一張寬為A長為B的白紙上。 這些長方形被放置時,保證了它們的邊於白紙的邊緣平行。 所有的長方形都放置在白紙內

USACO3.1.6 Stamps郵票

這一道題,算是我“千辛萬苦”才做出來的吧。因為,我在時超70後代寫了很久,才找出了一個能對但又不超時的方法。 下邊,來說一說我的超時思想: 用i來列舉,從1一直到2000000,在一個個判斷,知道i不可以結合出來就輸出並結束程式,(呵呵,不超時的話,那就是相當於中了2億元的大獎了) 好了看一

USACO3.2.2 Stringsobits__01串

【題目】 考慮排好序的N(N<=31)位二進位制數。 你會發現,這很有趣。因為他們是排列好的,而且包含所有可能的長度為N且含有1的個數小於等於L(L<=N)的數。 你的任務是輸出第I(1<=I<=長度為N的二進位制數的個數)大的,長度為N,且含有1的個數小於等於L的那

USACO3.2.6 Sweet Butter香甜的黃油

這一題,我本來是想用spfa演算法的,但後來嫌太累了,就打了個習以為常的floyd演算法。 floyd演算法很簡單——三重迴圈。。。 for (k=1;i<=p;i++) for (i=1;j<=p;j++) for (j=i

JZOJ1312.USACO5.1.1 Fencing the Cows圈奶牛

problem 題目描述 農夫約翰想要建造一個圍欄用來圍住他的奶牛,可是他資金匱乏。他建造的圍欄必須包括他的奶牛喜歡吃草的所有地點。對於給出的這些地點的座標,計算最短的能夠圍住這些點的圍欄的長度。 PROGRAM NAME: fc INPUT FORMA

JZOJ1274.USACO2.4.4 Bessie Come Home回家

題目描述 現在是晚餐時間,而母牛們在外面分散的牧場中。 農民約翰按響了電鈴,所以她們開始向穀倉走去。 你的工作是要指出哪隻母牛會最先到達穀倉(在給出的測試資料中,總會有且只有一隻速度最快的母牛)。 在擠奶的時候(晚餐前),每隻母牛都在她自己的牧場上,一些

USACO 動態規劃 彙總

資料結構能打到省選了=-= 但是其他類問題只能打到普及 普及啊啊啊!!! 而且這邊省選組都是什麼仙人掌啊,什麼系什麼點對啊...感覺資料結構並沒有什麼用 (實際上很有用但我不會運用) 然後頹到提高組來了..結果全是模擬還有一堆沒學的其他玩意 (迴文自動機) 資料結構也沒

一大堆的福利之USACO Mixing Milk混合牛奶

題目描述 牛奶包裝是一個如此低利潤的生意,所以儘可能低的控制初級產品(牛奶)的價格變的十分重要。 請幫助快樂的牛奶製造者(Merry Milk Makers)以可能的最廉價的方式取得他們所需的牛

一大堆的福利之USACOThe Clocks

考慮將如此安排在一個 3 x3 行列中的九個時鐘: |-------| |-------| |-------| | | | | | | | |---O | |---O | | O | | | |

日常學習筆記2019/1/(4,7)(SSM再熟悉與網頁傳值)

學生管理系統(SSM簡易版)總結 可以用來再次熟悉SSM https://www.jianshu.com/p/6a594fbea51d 頁面傳值 示例:點選a頁面的p標籤,將p標籤內的學號傳遞到b頁面,之後b頁面根據得到的值,再進行ajax資料請求,顯示此學號的詳情。 a

數據3.0 ‘’Windows系統環境下MySQL安裝

數據庫 alt 壓縮 article 免安裝配置 acm image mysql my.ini 1.0 我的操作系統是window10 專業版 64位。,不過至少windows7以上系統都是一樣的。 關於MySQL如何下載,請參考博文: 【數據庫】2.0 如何獲得MySQL

OCP最新CUUG OCP 12c 071考試題(67

ctu ans The evaluate edi cit edit where which 67、(25-8)choose the best answer: View the Exhibit and examine the structure of CUSTOMERS ta

OCP最新CUUG OCP 12c 071考試題(65

answer oos choose pla limit tasks sel task 不能 65、(22-16) choose the best answer: The CUSTOMERS table has the following structure: You nee

OCP最新CUUG OCP 12c 071考試題(68

數據 ted name 性能視圖 statement 不能訪問 inf dynamic acc 68、(29-13)choose two: Which two statements are true? (Choose two.) A) DICTIONARY is a vie

OCP|052OCP最新解析系列-1

RoCE hive roc from ace led pro arc logs 1、.Which two are true about the Archive (ARCn) processes?? A) They automatically delete obsolete

C語言計算1-1/2+1/3-1/4+1/5 …… + 1/99

//計算1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100的值 #include <stdio.h> int main() { float sum=0; fl

C/C++程式碼練習111-1/2+1/3-1/4+...+1/n的兩種計算方法

方法一: #include <stdio.h> #include <math.h> int main(void) { int n; scanf("%d",

C語言1-1/2+1/3-1/4……1/n求多項式結果

/* ============================================================================ Name : Fact

Poco 1.4.2 HTTPClientSession/HTTPRequest 使用使用代理(proxy)需要註意的一點

方法 xxx and aid csdn 代理 ref cpp logs Poco 1.4.2 HTTPClientSession/HTTPClientSession 在使用代理的時候,request的URI不能包含協議和主機。否則會出錯。 不使用代理的時候,以下代碼能正

51NOD 12674個數和為0

www namespace quest color https question clas amp -a 4個數和為0 鏈接: 原題 題意: ... 這 思路: 由於(n=1000),O(n^2)的算法也可一試。