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";
  }
};