Official

E - 良い日付/Only 2 kinds Editorial by Nyaan


まず、簡素なアルゴリズムとして、

  • \(D\) が条件を満たさない間 \(D\) を次の日に進める。\(D\) が条件を満たしたらこれを答えとして出力する。

というアルゴリズムが正答を返すことは直ちに確認できると思います。

答えとしてあり得るのは 2000/02/02 ~ 3000/03/03 までのおよそ \(1000\) 年間 \(\simeq\) \(365000\) 日なので、上記のアルゴリズムで「\(D\) を次の日に進める」という操作が発生するのは高々約 \(365000\) 回です。

よって、上記のアルゴリズムを適切に実装できればこの問題を十分高速に解くことができます。 実装においては、 Python の datatime モジュールにある日付の取得・1日加算を行えるクラスを利用するのが簡明です。

Python による実装例は次の通りです。

import datetime

D = datetime.date.fromisoformat(input().replace('/', '-'))
while len({c for c in D.isoformat()}) > 3:
  D += datetime.timedelta(days=1)
print(D.isoformat().replace('-', '/'))