A - Tomorrow Editorial by MMNMM


場合分けが必要ない解法について解説します。

\(y\) 年 \(m\) 月 \(d\) 日が、\(0\) 年 \(1\) 月 \(1\) 日から数えて何日めかについて考えます。

\(1\) 年は \(M\times D\) 日なので、これは \(y\times M\times D+(m-1)\times D+(d-1)\) 日です。

逆に、\(0\) 年 \(1\) 月 \(1\) 日から数えて \(X\) 日めの日の日付は \(\left\lfloor\dfrac X{MD}\right\rfloor\) 年 \(\left\lfloor\dfrac XD\right\rfloor\%\,M+1\) 月 \(X\,\%\,D+1\) 日です。
ただし、\(a\,\%\,b\) で \(a\) を \(b\) で割ったあまりを表すこととします。

これは、\(X\) を \(D\) で割った商とあまり \(X=qD+r\) を等式 \(X=(y\times M+(m-1))\times D+(d-1)\) と比較することなどで求めることができます。

あとは、これを計算することで答えを求めることができます。

M, D = map(int, input().split())
y, m, d = map(int, input().split())

day = (y * M + (m - 1)) * D + (d - 1)
day += 1

print(day // D // M, day // D % M + 1, day % D + 1)

posted:
last update: