結果

問題 No.294 SuperFizzBuzz
コンテスト
ユーザー ゴリポン先生
提出日時 2026-07-24 21:02:06
言語 D
(dmd 2.112.0)
コンパイル:
dmd -fPIE -m64 -w -wi -O -release -inline -I/opt/dmd/src/druntime/import/ -I/opt/dmd/src/phobos -L-L/opt/dmd/linux/lib64/ -fPIC _filename_
実行:
./Main
結果
AC  
実行時間 22 ms / 5,000 ms
+ 886µs
コード長 955 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,886 ms
コンパイル使用メモリ 172,728 KB
実行使用メモリ 5,888 KB
最終ジャッジ日時 2026-07-24 21:02:11
合計ジャッジ時間 4,257 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge2_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 12
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

module main;
// https://kmjp.hatenablog.jp/entry/2015/10/24/0900 より
// ビット演算、数え上げ
import std;
import core.bitop;

// 二項係数(Knuthの方法、オーバーフローは考慮していない)
long binom(long n, long k)
{
	if (n < k || k < 0) return 0L;
	if (n - k < k) k = n - k;
	if (k == 0) return 1L;
	if (k == 1) return n;
	static long[long][long] memo;
	if (n !in memo || k !in memo[n]) {
		memo[n][k] = binom(n - 1, k - 1) * n / k;
	}
	return memo[n][k];
}

void main()
{
	// 入力
	int N = readln.chomp.to!int;
	// 答えの計算と出力
	foreach (d; 2 .. 31) {
		long p = 0;
		foreach (n5; 0 .. d)
			if ((n5 + 1) % 3 == 0)
				p += binom(d - 1, n5);
		if (p >= N) {
			for (int mask = 1;; mask += 2) {
				if (popcnt(mask) % 3 != 0) continue;
				if (--N == 0) {
					char[] s;
					foreach (x; 0 .. d) s ~= '3' + ((mask & (1 << x)) != 0) * 2;
					writeln(s.reverse);
					return;
				}
			}
		}
		else N -= p;
	}
}
0