版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、解題題意描述根據(jù)水的性質(zhì),水總是望較低的方向流的,如果一個(gè)地區(qū)的積水能流到整個(gè)地區(qū)的邊緣,那么這個(gè)地區(qū)就不會(huì)積水了。同樣的,可積水地區(qū)積水的高度也是由這個(gè)性質(zhì)決定的。很自然的,每個(gè)格子積水的高度是有周?chē)乃膫€(gè)格子決定的。于是想到一個(gè)類(lèi)似于松弛算法的想法:最開(kāi)始時(shí),每個(gè)格子積水的高度定為一個(gè)充分大的值,每次搜索所有的格子,將格子中積水的高度按照周?chē)褡拥那闆r改變。這樣的過(guò)程一直持續(xù)到?jīng)]有需要改變的格子為止。這樣得到的就是每個(gè)格子中積水的最大值。程序編起來(lái)也非常簡(jiǎn)單,但分析了算法的時(shí)就不得不放棄這法:算法的時(shí)間復(fù)雜度高達(dá) O(n2*m2)間復(fù)雜度后,算法分析來(lái)?yè)Q一個(gè)角度問(wèn)題,可積水地區(qū)一定是凹陷的
2、,也就是說(shuō)它的周?chē)灰粚虞^高的建筑包起來(lái)了。是不是可以求這樣的一個(gè)封閉的區(qū)域呢,然后再求積水的高度就可以簡(jiǎn)單一些了。連通的積水格子看成一個(gè)大塊。每個(gè)積水塊都是由不積水的干地包圍起來(lái)的。當(dāng)然也可能出現(xiàn)一個(gè)積水塊被另一個(gè)包在的情況(如上圖所示)。首先考慮在最外層的積水塊 A。對(duì)于那些包圍 A 的干地,落在它們上面的雨水一定是流到地圖的邊緣了,否則它們也將積水。這樣可以簡(jiǎn)單的利用寬度優(yōu)先搜索的方法將 A 的輪廓勾勒出來(lái):從最邊緣的格子開(kāi)始,分析每格干地,查看這個(gè)格子周?chē)乃母?,如果有格子高于?dāng)前格的高度,那么那個(gè)格子上的水也將流向地圖邊緣而成為干地。將那個(gè)格子加入到待分析的隊(duì)列中并將這個(gè)格子標(biāo)上已操
3、作標(biāo)記。寬度優(yōu)先搜索后,A 的輪廓就出來(lái)了。沿著 A 的輪廓順時(shí)101010101010101088888101081111118101081191181010811111181010888881010101010101010針走一圈后,就可以得到輪廓中的格子的最低高度,而這就是 A 中積水的高度。仍然用寬度優(yōu)先的算法,可以遍歷 A 中的格子。統(tǒng)計(jì)了 A 中格子內(nèi)的積水量后,將每個(gè)格子的高度提高到與水面相平。如上面的例子里,在對(duì)高度為 8 的格子注水以后,地圖變成了下面的情況。在這張圖里可以清楚的看到原先的積水區(qū)變成了干地。這樣就能對(duì)原先處于的積水區(qū)進(jìn)行操作了。算法效率在剛才的算法里每個(gè)格子僅
4、被標(biāo)號(hào)一次,在格子被標(biāo)號(hào)前只進(jìn)行一次寬度優(yōu)先搜索,而格子被標(biāo)號(hào)后就不再對(duì)它進(jìn)行任何操作了。故對(duì)每個(gè)格子的運(yùn)算量為 O(1)。因此算法的時(shí)間復(fù)雜度為O(n*m)。此算法對(duì)于所有測(cè)試數(shù)據(jù)都能在 0.5s 內(nèi)出解。源程序constinf ouf maxnmove=wod.in;=wod.out;=10;:array1.4,1.2 ofeger=(-1,0),(1,0),(0,1),(0,-1);varn,m,i,j map findtot:eger;:array1.maxn,1.maxn of:array1.maxn,1.maxn of:long;eger;eger;function max(a,b
5、:eger):eger;1010101010101010101010101010101011111110101010119111010101011111110101010101010101010101010101010beginif ab then max:=a else max:=b;end;procedure work(sx,sy: varlistp,q,x,yeger);:array1.maxn*maxn,1.2 of:eger;eger;beginp:=1;q:=1;list1,1:=sx;list1,2:=sy;findsx,sy:=2; while p=q do beginfor
6、i:=1 to 4 do begin x:=listp,1+movei,1;y:=listp,2+movei,2;if (x0) and (y0)and (findx,y=0) and (mapx,y=maplistp,1,listp,2) then begin findx,y:=2;inc(q); listq,1:=x;listq,2:=y;end; end; inc(p);end;end;function get(i,j:eger):eger; vark,u,x,y beginu:=max;for k:=1 to 4 do begin x:=i+movek,1;y:=j+movek,2;:
7、eger;if (x0) and (y0)and (findx,y=2) and (mapx,yu) then u:=mapx,y;end;get:=u;end;function find_min(sx,sy:eger):eger;varlistp,q,x,y,min,k:array1.maxn*maxn,1.2 of:eger;eger;beginp:=1;q:=1;list1,1:=sx;list1,2:=sy;findsx,sy:=1;min:=get(sx,sy); while p=q do beginfor i:=1 to 4 do begin x:=listp,1+movei,1;
8、y:=listp,2+movei,2;if (x0) and (y0) and (findx,y=0) then begin k:=get(x,y);if kmhen min:=k;findx,y:=1; inc(q); listq,1:=x;listq,2:=y;end;end;inc(p);end;find_min:=min;end;procedure sum(sx,sy,k: varlistp,q,x,yeger);:array1.maxn*maxn,1.2 of:eger;eger;beginp:=1;q:=1;list1,1:=sx;list1,2:=sy;findsx,sy:=2;
9、 tot:=tot+k-mapsx,sy;while p=q do beginfor i:=1 to 4 do begin x:=listp,1+movei,1;y:=listp,2+movei,2;if (x0) and (y0) and (findx,y=1) then begin findx,y:=2;tot:=tot+max(0,k-mapx,y); inc(q);listq,1:=x;listq,2:=y;end; end; inc(p);end;end;procedure solve; vari,j,k:eger;beginfillchar(find,sizeof(find),0); for i:=1 to n do beginwork(i,1);work(i,m);end;for i:=1 to m do begin work(1,i);work(n,i);end; tot:=0;for i:=1 to n do for j:=1 to m k:=find_min(i,j); sum(i,j,k);end;wrin(tot);end;f findi,j=0 then beginbeginassign(input
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《疫苗及接種醫(yī)學(xué)》課件
- 《眼的解剖》課件
- 地理-山東省淄博市2024-2025學(xué)年第一學(xué)期高三期末摸底質(zhì)量檢測(cè)試題和答案
- 小學(xué)五年級(jí)數(shù)學(xué)上期小數(shù)點(diǎn)乘除法計(jì)算習(xí)題
- 小學(xué)數(shù)學(xué)新人教版一年級(jí)下冊(cè)20以?xún)?nèi)口算練習(xí)題大全
- 【金榜學(xué)案】七年級(jí)歷史上冊(cè)第一單元第2課原始的農(nóng)耕生活達(dá)標(biāo)檢測(cè)岳麓版
- 勇敢地化蝶高考語(yǔ)文閱讀理解
- 《智慧醫(yī)療解決方案》課件
- 《爐內(nèi)冒正壓的機(jī)理》課件
- 高錳鋼鑄件裂紋缺陷形成原因
- 六年級(jí)語(yǔ)文上冊(cè)期末試卷及完整答案
- 人教版(2024)數(shù)學(xué)七年級(jí)上冊(cè)期末測(cè)試卷(含答案)
- 醫(yī)院護(hù)理10s管理
- 2024年山西晉中市靈石縣事業(yè)單位招聘工作人員公8人歷年管理單位遴選500模擬題附帶答案詳解
- 北京市東城區(qū)2023-2024學(xué)年八年級(jí)上學(xué)期期末生物試題
- ISO28000:2022供應(yīng)鏈安全管理體系
- 人教版六年級(jí)數(shù)學(xué)下冊(cè)全冊(cè)分層作業(yè)設(shè)計(jì)含答案
- “挑戰(zhàn)杯”優(yōu)秀組織獎(jiǎng)申報(bào)材料
- 小學(xué)二年級(jí)上冊(cè)道德與法治教學(xué)工作總結(jié)
- 超聲波治療儀的臨床應(yīng)用(軟組織損傷篇)
- 汽油調(diào)和技術(shù)
評(píng)論
0/150
提交評(píng)論