SRM554 Div2 Easy " TheBrickTowerEasyDivTwo"
問題
赤色と青色のレンガを積み重ねて塔を作る。
赤と青のレンガは交互に積み重ねていかなくてはいけない。
一番下は赤と青どちらでもよい。
赤色と青色のレンガの数(redCount, redHeight)と高さ(redHeight, blueHeight)が与えられた時、
高さが異なる塔が何種類出来るかを返せ。
制約
1 <= redCount, redHeight, blueCount, blueHeight <= 50
考えた事
交互に乗せないといけないということは、赤の数と青の数の差は1以内でなければならないので、
赤 == 青 + 1,
赤 + 1 == 青,
赤 == 青
の3パターンを試す
コード
class TheBrickTowerEasyDivTwo { public: int find(int redCount, int redHeight, int blueCount, int blueHeight){ set<int> ts; int rc = redCount, rh = redHeight, bc = blueCount, bh = blueHeight; for( int i = 1; i <= rc && i - 1 <= bc; i++ ){ int h = i * rh + (i-1) * bh; ts.insert( h ); } for( int i = 1; i - 1 <= rc && i <= bc; i++ ){ int h = (i-1) * rh + i * bh; ts.insert( h ); } for( int i = 1; i <= rc && i <= bc; i++ ){ int h = i * rh + i * bh; ts.insert( h ); } return ts.size(); } }
事後
残念な事にbhをbcと書き間違えてWA
Sample通っちゃったからなー
さらにSystem Testも1問除いて全て通ってたっていうね