Div2 250 EasyConversionMachine
問題概要
a と b からなる 2 つの文字列が与えられる。このとき、a→b もしくは b→a の文字変換をちょうど k 回行なって一方の文字列をもう一方に変換することは可能か?
考え方
とりあえず、2 つの文字列で異なる箇所が k より多くあっては変換できないのでカウントしてみる必要がある。
もし異なる文字が k 箇所ピッタリだったらそのまま成功で問題ないが、k より少なかった場合は a→b→a もしくは b→a→b という形の変換を何度か行う必要がある。いずれにしても 2 回の操作を行うことになるので、余った分が偶数であれば変更できるということが分かる。
コード
#include <string> using namespace std; struct EasyConversionMachine { string isItPossible(string originalWord, string finalWord, int k) { for (size_t i = 0; i < originalWord.size(); ++i) if (originalWord[i] != finalWord[i]) --k; if (k < 0) return "IMPOSSIBLE"; return (k % 2 == 0) ? "POSSIBLE" : "IMPOSSIBLE"; } };