結果
| 問題 | No.3432 popcount & sum (Hard) |
| コンテスト | |
| ユーザー |
tomerun
|
| 提出日時 | 2026-01-11 14:48:07 |
| 言語 | Crystal (1.18.2) |
| 結果 |
AC
|
| 実行時間 | 8 ms / 2,000 ms |
| コード長 | 782 bytes |
| 記録 | |
| コンパイル時間 | 17,872 ms |
| コンパイル使用メモリ | 335,820 KB |
| 実行使用メモリ | 7,848 KB |
| 最終ジャッジ日時 | 2026-01-11 14:48:26 |
| 合計ジャッジ時間 | 15,834 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 16 |
ソースコード
MOD = 998244353i64
n = read_line.to_i64
ans = 0i64
60.times do |pos|
dp = Array.new(2) { Array.new(61, 0i64) }
dp[1][0] = 1
59.downto(0) do |i|
dp2 = Array.new(2) { Array.new(61, 0i64) }
0.upto(60) do |j|
dp2[0][j] += dp[0][j] if i != pos
dp2[0][j + 1] += dp[0][j] if j + 1 < dp2[0].size
if n.bit(i) == 0
dp2[1][j] += dp[1][j] if i != pos
else
dp2[0][j] += dp[1][j] if i != pos
dp2[1][j + 1] += dp[1][j] if j + 1 < dp2[0].size
end
end
0.upto(60) do |j|
dp2[0][j] %= MOD
dp2[1][j] %= MOD
end
dp = dp2
end
base = (1i64 << pos) % MOD
60.times do |i|
cnt = dp[0][i] + dp[1][i]
cnt = (cnt * (cnt - 1) // 2 + cnt) % MOD
ans += base * cnt
ans %= MOD
end
end
puts ans
tomerun