Official

B - Sandwich Number Editorial by KoD


答えが Yes であるためにはどのような条件が成り立たなければならないか考えてみます。まず思いつくのは次の条件でしょう。

  • 先頭の文字は英大文字
  • 末尾の文字は英大文字
  • 先頭・末尾以外の文字は全て数字

これだけで正解することはできるでしょうか?実はそうではなく、例えば A10000000B のような入力を誤って Yes と判定してしまいます。

先頭の英大文字に続くのは、「\(100000\) 以上 \(999999\) 以下の整数を \(10\) 進表記して得られる長さ \(6\) の文字列」です。よって、

  • \(S\) の長さは \(1 + 6 + 1 = 8\)
  • \(S\) の二文字目は 0 ではない

という条件も必要です。後者の条件がないと A012345B などを誤って Yes と判定してしまうことに注意してください。

これで \(5\) つの必要条件を列挙することができました。「\(S\) の長さは \(8\)」「先頭・末尾以外の文字は全て数字」「\(S\) の二文字目は 0 ではない」という条件を合わせると、\(S\)\(2\) 文字目から \(7\) 文字目までは \(100000\) 以上 \(999999\) 以下の整数を \(10\) 進表記して得られる長さ \(6\) の文字列であることが導かれるため、これら \(5\) つの条件は必要条件であるだけでなく、十分条件にもなっていることが確認できます。

よって、\(5\) つの条件を判定するコードにより正解することができます。

実装例 (C++)

実装例 (Python)

posted:
last update: