2012-08-23
SRM 553
Div1 Easy (250) Suminator
問題
- Suminatorは加算だけ可能なスタックマシンである。
- プログラムとして非負の整数の配列が与えられ、順番に実行する。
- スタックへは、プログラムが0なら2値を足して格納し、0以外ならそのまま格納する。
- 最後にスタックの先頭を表示して終了する。
- 一箇所だけ書き換えて結果をwantedResultにするための最小の数値を求める。
方針
- 書き換える場所をPOSとする
- POSを0に書き換えてシミュレーションし、結果がwantedResultなら0を返す(最小ケース)
- POSを1に書き換えてシミュレーションした結果をXとする
- XがwantedResultなら1を返す
- XがwantedResultより小さくて、かつ、Xを求めるためにPOSのデータを使っているなら、可能なのでwantedResult-X+1を返す
- それ以外は不能(-1)
- あらかじめスタックにはサイズの2倍だけ0を積んでおいた
- POSを使っているかどうかは、std::pairのsecondに入れておいた
- https://github.com/firewood/topcoder/blob/master/srm_5xx/srm_553/Suminator.cpp
結果
o-- 164.13pt 206th rating 1251 -> 1344 (+93)
素直に考えて普通に書いたら通った。良い感じ。
longにしてないコードがたくさんあったようで結構落ちていた。
コメントを書く
トラックバック - https://topcoder-g-hatena-ne-jp.jag-icpc.org/firewood/20120823