解説

この問題で注意する点を解説します。

まずは暦です。 この問題では、全ての月が 3131 日まで存在する特別な暦を使用しており、私たちが一般に使用するグレゴリオ暦とは異なります。 なので、 22 月や 44 月などで場合分けをする必要はありません。

次に入力です。BBSi(1iN)S_i \: (1 \leq i \leq N)MM/DD 形式で与えられます。MMDD は整数ですが、間に / が含まれるので、文字列として受け取る必要があります。

最後に出力形式です。この問題の出力形式は条件を満たす Si(1iN)S_i \: (1 \leq i \leq N) を日付が小さい順に出力する必要があります (この操作を「ソート」と呼びます)。 ソートを行う方法には様々な方法がありますが、ここでは以下のような方法を解説します。

この問題でソートする数は、最大で 0101 日から 3131 日の 3131 個です。 なので、要素数が 3131 個の配列 Flag を用意します。 そして、for 文を使用して、全ての SiS_iMM について BBMM と等しいかを判定します。 等しいときの SiS_iDD 番目の Flag の要素のフラグを立てます。
すべての SiS_i について判定が終わったら、for 文で Flag の 11 番目から 3131 番目までを順にフラグが立っているかを判定し、条件を満たす SiS_i を出力します。
このようにして、条件を満たす SiS_iDD が小さい順に出力することができます。

解答例

解答例(C)

解答例(C++)

解答例(Python)