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: