ページ

2012/05/03

[競技プログラミング][C言語][AtCoder]割り切れる日付

B - 割り切れる日付

時間制限 : 2sec / スタックサイズの制限 : 10MB / メモリー制限 : 64MB

問題文

高橋君は割り切れる日付が好きです。
割り切れる日付とは、年÷月÷日の計算結果が整数になる日付のことです。
例えば今日の日付は 2012 年 5 月 2 日ですが、
2012÷5÷2=201.2 となり整数ではないので、今日の日付は割り切れる日付ではありません。

高橋君は割り切れる日付が好きでたまらないので、
次の割り切れる日付を心待ちにして、毎日今日が割り切れる日付かどうかをチェックしてしまいます。
彼に少しでも多くの仕事をしてもらうために、
入力として与えられた日付以降で最初に来る割り切れる日付を求めなさい。
ただし、入力として与えられた日付が割り切れる日付だった場合は、与えられた日付が答えになります。

入力

入力は以下の形式で標準入力から与えられる。
Y⁄M⁄D
グレゴリオ暦(現在、日本で一般的に使われている暦)に従って
年を表す Y、月を表す M、日を表す D が / で区切られて 1 行で与えられる。
Y は 4 桁、M と D は 0 埋めされた 2 桁の整数である
(M と D は、1 桁の数の場合も 1 桁目に 0 をつけて 2 桁にする)。
与えられる日付は 1000⁄01⁄01 以降、2999⁄12⁄31 以前とする。

出力

入力として与えられた日付以降で最初に割り切れる日付を、入力と同じ形式で標準出力に 1 行で出力せよ。
ただし、入力として与えられた日付が割り切れる日付だった場合は、入力と同じ日付を出力すること。
なお、最後には改行を出力せよ。

出典

割り切れる日付 - AtCoder Regular Contest #002 | アットコーダー

回答

AtCoder/arc002_2.cpp at master · wada811/AtCoder

A問題でやった閏年判定を活用して各月の日数の配列の2月の値をインクリメント。
16行目は yaer % (month * day) == 0 にすると処理時間が伸びるのであえてこの形。
25行目はいらないんだけど、外すと何故か使用メモリが大きくなるので書いてある。
別にそんなにシビアなわけじゃないけど他の問題は出来なかったし、
取り組むつもりがないのでB問題をこだわってみた。