Hatena::Grouptopcoder

hotpepsiの練習帳

2011-05-09

SRM 504 Div2

02:40

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だった。

トラックバック - http://topcoder.g.hatena.ne.jp/firewood/20110509