竹園論壇
標題:
a888 - C. 混色模式 (NPSC2013 國中組初賽)
[打印本頁]
作者:
domen111
時間:
2014-11-25 15:41
標題:
a888 - C. 混色模式 (NPSC2013 國中組初賽)
本帖最後由 domen111 於 2014-11-25 16:02 編輯
之前一直覺得好難(可能是因為我一直推Sigma的公式的關係吧),今天頭腦突然想通了就覺得好像也沒多難
基本的上的想法是線性搜尋中間線(紅線),將長方形切割成左右兩部分,左右兩部分分別求出方法數,相乘就是答案了。
(圖一)
問題
: 不會有左右交叉的問題嗎? 如圖二
這就是我之前一直糾結很久的問題,事實上其實只要中間線切割的是長方形的長邊就不會有這個問題,所以第16行寫個判斷就一切解決。
(圖二)
好了
,既然我們現在已經有了基本的想法,那麼下一步就是求左邊和右邊有多少種方法
左半部
:
我們定義左半部較大的那塊正方形一定要貼齊中間線,否則可能會有重複計算的問題(假設左右半部都沒有貼齊中間線,可能同種情形不同中間線都會算到)
首先我們假設左上角的正方形>=左下角的正方形,既然一定要貼齊中間線,表示已經確定左上角的大小,那麼計算左下角的正方形有幾種方法數就ok了。
注意
(我一開始寫出的小bug)
: 第21行,如果已經不可能貼齊中間線了就break
右半部
:
比左半部複雜一些,自己推一下公式,我的code的解法用cal的function去計算,不過事實上不用那麼麻煩,因為我的cal function是支援兩個方形上限大小不同的情形 (那是我之前在想一個很複雜的作法時推出的公式)
歡迎光臨 竹園論壇 (http://forum.tfcis.org/)
Powered by Discuz! X3.2