ARC108B Abbreviate Fox
問題
長さの英小文字からなる文字列が与えらえれる。ここから連続部分文字列'fox'を削除する操作を繰り返した時に最後に残るの最小の長さをこたえよ。
制約
考え方
これ茶diffかぁ、沼にハマっちゃってたねぇ。コンテスト中は'fox'を()列に置き換えてみたり、左から貪欲に'f'と'fo'がそれまでに出てきたかどうかでフラグ管理してみたり、色々試してみたけど大事なのは
"愚直な操作を通るようにできないか考えてみる"
ことでしたね。文字列に対する挿入、削除は"末尾を除き"一回当たりかかりますが末尾に限りで済むのでなんとか文字列に対する末尾の操作のみでシミュレーションできないか考える。この考え方はABC158 String Formation
とかでもありましたね。今回の場合は
"空文字列に対して文字列の文字を左から順番に加えていき、文字列'fox'が出てきたら逐次削除する"
という方法で計算量で十分高速にシミュレーション可能なんですね、うーん思いつきたかった。
コード
https://atcoder.jp/contests/arc108/submissions/18291630
感想
うーん、悔しい。ともあれ
"文字列に対する挿入/追加を何らかの文字列の末尾への処理のみの操作に置き換えることで高速化する"
という自分のなかでの新しい典型を作れたのでよしとしよう、次似たような問題出たらぜって―解く。読んでくれてありがとうございました。
余談
はてなブログって見たまま編集だとソースコード貼り付けられないんすね...。別にこのままでもいい気はするけどせっかくだからどこか機会見つけたらはてな記法の勉強しようかな...。