基礎演算法 usaco 3 1 4 rect1

2022-07-21 00:03:26 字數 2258 閱讀 8461

問題

描述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增序排列。

[編輯]sample input

20 20 3

2 2 18 18 2

0 8 19 19 3

8 0 10 19 4

[編輯]sample output

1 91

2 84

3 187

4 38

分析
這就是那天那到「浮水法」的矩形版。思想一樣,不再多說,有疑問可以參見我部落格上【11月11日的測試】。
但是矩形的思維量就要比線段大的多了。對於矩形來說,兩個矩形的關係很複雜,所以,我們的思想就是讓當前能穿的繼續穿,然後改變矩形的大小,
讓剩下的部分繼續穿透即可。也就是說對於輸入的值,我們要變化。具體的法則自己畫個圖就明白了,**也很好理解。
注意題目要求
反思
好多問題都是由簡到繁,但是,思想是一致的。這就需要我們能夠遷移。能夠加強條件。有思想不等於得分。
code

program liukee;

var s,color,lx,ly,rx,ry:array[0..10000] of longint;

m,n,tot,i,max:longint;

procedure cut(x1,y1,x2,y2,t:longint);

begin

// if t<=tot then

while(t<=tot)and((x2<=lx[t])or(x1>=rx[t])or(y1>=ry[t])or(y2<=ly[t]))do

inc(t);

if t>tot then

begin

inc(s[color[i]],abs((x2-x1)*(y2-y1)));

exit;

end;

if (x1<=lx[t])then begin cut(x1,y1,lx[t],y2,t+1); x1:=lx[t];end;

if (x2>=rx[t])then begin cut(rx[t],y1,x2,y2,t+1); x2:=rx[t];end;

if (y1<=ly[t])then begin cut(x1,y1,x2,ly[t],t+1); y1:=ly[t];end;

if (y2>=ry[t])then begin cut(x1,ry[t],x2,y2,t+1); y2:=ry[t];end;

end;

begin

assign(input,'rect1.in');

assign(output,'rect1.out');

reset(input);

rewrite(output);

readln(rx[1],ry[1],n);//inc(rx[1]);inc(ry[1]);

lx[1]:=0;

ly[1]:=0;

color[1]:=1;

max:=1;

for i:=1 to n do

begin

readln(lx[i+1],ly[i+1],rx[i+1],ry[i+1],color[i+1]);

if max0 then

writeln(i,' ',s[i]);

close(input);

close(output);

end.

3 1 4排程演算法

按照作業 程序達到的先後順序進行服務 對長作業有利,對短作業不利,不會導致飢餓 短作業優先預設是非搶占式的,對短作業有利,對長作業不利 會導致飢餓 搶占式的版本是最短剩餘時間優先演算法 srtn 它具有最短的平均等待時間 既要考慮執行時間,又要考慮等待時間,綜合了前兩個方法的優點,不會導致飢餓 響應...

3 1 4 MySQL基礎 資料的基礎操作

insert語句可以向資料表寫入資料,可以是一條,也可以是多條 insert into 表名 欄位1,欄位2,values 值1,值2,insert into 表名 欄位1,欄位2,values 值1,值2,值1,值2,mysql的insert語句還有一種方言語法 insert into 表名 se...

USACO演算法序列十七 range

題目 http www.nocow.cn index.php translate usaco range 尋找正方形內部所有的正方形塊,包括任意小塊。如果遍歷每個節點,把每個節點當做正方形塊的起始點,然後尋找正方形,會超時的。但是這道題可以通過動態規劃的思想來考慮。map i j 示正方形右下角i,...