SRM 663 Div2 Med ABBA
- 復習。本番 TLE しそうだな。と思いながらも愚直な実装で撃墜されたやつ。
- target からは一意に復元ができそうな気はしていたものの、やり方が思いつかなかった。
- 単純に末尾から削っていく逆変換をすればよいだけだった
class ABBA { public: string canObtain(string initial, string target) { // initial に操作を加えると分岐が増えてしまうので target を initial に // なるように逆操作をしてやればよい。 // target の末尾をけずりつつ必要な逆変換を施す while (target.length() > initial.length()) { // 末尾切り出し int c = target.back(); target.erase(target.end()-1); // 末尾が B なら変換前のものから反転されていたはず。 if (c=='B') reverse(target.begin(), target.end()); // 末尾が A ならそのままとりのぞく } if (target==initial) return "Possible"; else return "Impossible"; } };