TopCoder SRM597
250
文字列 A に対して,「1 文字選んで先頭に持ってくる」操作を行うことができる.A を別の文字列 B に変えるために必要な操作の回数は?
A の部分文字列で,B の後ろのほうに一致しているものの最長の長さを求める.
600
凸多角形が与えられるので,その内部(辺上は含むが頂点は含まない)に頂点が整数座標であるような別の凸多角形を取れるか判定せよ.という問題になる.
内部の点が一直線上にあるかどうかを判定する(と思う).落ちた
900
2*M のマス目を,赤,緑,青のいずれかで塗る.同じ色が隣り合ってはいけない.また,どの 2*2 の部分についても,赤,緑,青のそれぞれが 1 マス以上なければならない.赤,緑,青のマス数が与えられるので,塗り方の場合の数を求めよ.
2 列組で考えると,「赤緑」「赤青」「緑青」のどれか(逆も含む)である.一番上の行でこれらを置く向きを決めると,それ以下は全部自動的に決まる.2*2 の部分についての条件より,同じものが隣り合ってはいけない.それぞれの必要個数は簡単に求められる.
つまり,A, B, C を決められた個数,同じものが隣り合わないように並べる場合の数 * 2 を求める問題になる.
あとは,場合の数をがんばって求める.
結果
mid を適当に眺めていたらおかしいのがあったので落として +50
mid 落ちた><
oxo +50 788.04 (4 位)
rating: 3126 -> 3172