結果

問題 No.87 Advent Calendar Problem
ユーザー ゴリポン先生
提出日時 2025-05-10 18:49:57
言語 D
(dmd 2.109.1)
結果
AC  
実行時間 2 ms / 5,000 ms
コード長 765 bytes
コンパイル時間 3,999 ms
コンパイル使用メモリ 158,592 KB
実行使用メモリ 6,272 KB
最終ジャッジ日時 2025-05-10 18:50:04
合計ジャッジ時間 5,323 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 24
権限があれば一括ダウンロードができます

ソースコード

diff #

module main;
// https://ja.wikipedia.org/wiki/ツェラーの公式 より
// https://tokyoaccent.com/calendar/retro.htm より
import std;

void main()
{
	// 入力
	auto N = readln.chomp.to!long;
	// 答えの計算と出力
	// y年7月23日の曜日(0:日曜日 ~ 6:土曜日)
	long zeller(long y)
	{
		return (y + y / 4 - y / 100 + y / 400 + (13 * 7 + 8) / 5 + 23) % 7;
	}
	// 2014年7月23日の曜日
	long d0 = zeller(2014);
	// 2015年を1年目として、1年目から400年目までに7月23日が水曜日になる日が何日あるか
	auto arr = new long[](401);
	long d = 0;
	foreach (y; 1 .. 401) {
		if (zeller(y + 2014) == d0) d++;
		arr[y] = d;
	}
	long Q = (N - 2015) / 400L;
	int R = (N - 2015) % 400 + 1;
	writeln(Q * arr[400] + arr[R]);
}
0