2011-05-09
SRM 504 Div2
Easy (250) ComparerInator 比較専用言語
問題
- 特定の比較演算結果と一致しているなら、1または7を返す
- 1と7の両方を満たす場合は1を返す
- 1も7も満たさない場合は-1を返す
はまりポイント
- 解く速さ優先なら、まとめるよりもコピペして1つずつ確実に判定したほうがよさげ。
実装した内容
- 演算子毎にカウントする
- a < bの判断自体は共通なのでまとめる
- カウントの長さが配列の長さと一致したら、その演算子を満たしたとみなす
https://github.com/firewood/topcoder/blob/master/srm_5xx/srm_504/ComparerInator.cpp
Medium (500) MathContest 白黒ボール
問題
- シーケンシャルなキューに白または黒のボールが入っている
- キューから1つずつボールを取り出す
- 取り出したボールが白だったらキューの残りのボールの並びを反転する
- 取り出したボールが黒だったらキューの残りのボールの色を反転する
実装した内容
- 配列の先頭と最後にポインタを設定しておく
- 並びが反転したら、読むポインタを変更する
- 色が反転したら、判定する色を変更する
https://github.com/firewood/topcoder/blob/master/srm_5xx/srm_504/MathContest.cpp
Hard (1000) Algrid 色塗り
問題
- 白または黒のセルで構成されたグリッドがある
- 上の行から下の行に、左から右に向かって処理する
- ある位置の処理において、上の位置の内容に応じて下の位置を塗る、または交換する
はまりポイント
- 塗られた部分については、元データがどちらでもよいので、Bとみなす
- 塗られていない部分については、交換操作を考慮して、元データのどの場所から来ているのかという情報を保持する必要がある
実装した内容
- 塗るべきところを塗る
- 交換するところは、ポインタを交換する
- 塗った部分について、出力データと比較して、不一致なら失敗とする
- 塗った部分はどちらでもよいので、元データをBとする
- 塗っていない部分は、出力データからもってくる
https://github.com/firewood/topcoder/blob/master/srm_5xx/srm_504/Algrid.cpp
結果
今回は問題文が比較的わかりやすかった。
システムのエラーにより残念ながらnon-rated。
時間中にはEasyとMediumを回答し、のちほどチェックしたところEasyはミスっていてMediumはOKだった。