2017年5月11日 星期四

hihocoder 1517 模拟降水

有夠難寫的
先放草稿,有空或心情好再修

簡單將作法分為三個部分

第一步是要把可以接受雨量的區域橫向切成許多矩形,這邊用 Stack (堆疊)操作,並且要把實際上不能接水(碰到最左最右的)做標記

第二步是計算降水 我們先處理比較簡單的case:一定只會從最左邊降水,那會發現 會優先選擇從「右界較小」的矩形降水,右界相同時是「左界較大」,依序標上降水順序,一個一個填滿,將填滿後的資料記下來,會是一個個矩形,我們稱做降水矩形
 不過注意這題降水點在中間 這樣就是左右分別標好後 取面積較小的先填滿 不過這邊有個麻煩case是要處理橫跨自己的矩形。
事實上 case 是五個,依序是
1. 左右是同一塊,都是跨過降水點的矩形
2. 左邊跨過降水點 右邊是正常,如此水會全部往右流
3. 和2.相反
4. 左右都正常,左邊較小,如此會花 w 將左邊填滿,同時 w 流向右邊
5. 和4.相反
第三步就是 哪些被填滿多少後 計算 T 那點的深度 這點就簡單了。
事實上只需要把經過 T 的降水矩形高度加起來就好。
要求出全部也很簡單,對每個降水矩形用左界+h右界-h 左往右做總和序列就好了

http://ideone.com/vc74vJ

沒有留言:

張貼留言