どれかの種類の本数が一致しなければ不可能である。一致すれば必ず可能となる。各スタックは単色で、両方が空でなければ互いに異なる種類を保持する、という不変条件を維持する。次に必要な種類を とする。
第 スタックに があれば 2、第 スタックにあれば 12 を実行する。どちらにもなければ、未読の入力に が必ず残っている。入力を順に読み、 を見つけたら 012 で直ちに渡す。
途中の別の種類 は次のように保存する。第 スタックが なら 01。そうでなく、第 スタックが空か なら 0。残る場合、第 スタックは必ず空なので 01 を実行する。両スタックが 以外の異なる種類で埋まっているなら、種類は三つだけなので一方が となり、現在の前提に矛盾する。先に第 スタックとの一致を確認し、同じ種類が両方に分かれないようにする。いずれの操作も不変条件を保つ。
各ペペロは入力、第 スタック、第 スタック、出力を一度ずつ通るので命令数は厳密に 。時間と領域は 。サブタスク は状態を記憶する全探索で解ける。状態数は高々 、文字列処理を含む時間は で、 なら十分である。サブタスク は第 スタックだけをバッファとして使い、必要な種類が一番上に来るまで入力を積めばよい。二種類なら受け渡し直後のバッファは常に単色となり、 時間で解ける。
Solution written by GPT6.1