結果
| 問題 | No.3432 popcount & sum (Hard) |
| コンテスト | |
| ユーザー |
kidodesu
|
| 提出日時 | 2025-12-29 17:14:27 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
AC
|
| 実行時間 | 55 ms / 2,000 ms |
| コード長 | 901 bytes |
| 記録 | |
| コンパイル時間 | 149 ms |
| コンパイル使用メモリ | 82,784 KB |
| 実行使用メモリ | 66,676 KB |
| 最終ジャッジ日時 | 2026-01-11 13:04:32 |
| 合計ジャッジ時間 | 1,675 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 16 |
ソースコード
mod = 998244353
def main(t):
dp = [0] * 61
pcnt = 0
f = 1
for i in range(59, -1, -1):
if i != t:
for j in range(59, -1, -1):
dp[j+1] = (dp[j+1]+dp[j]) % mod
if f:
if n >> i & 1:
dp[pcnt] = (dp[pcnt]+1) % mod
pcnt += 1
else:
for j in range(59, -1, -1):
dp[j+1] = dp[j]
dp[0] = 0
if f:
if n >> i & 1:
pcnt += 1
else:
f = 0
if f:
dp[pcnt] = (dp[pcnt]+1) % mod
return dp
n = int(input())
ans = 0
A = [pow(2, i, mod) for i in range(60)]
for i in range(60):
dp = main(i)
for j in range(61):
ans = (ans + A[i] * dp[j] * dp[j]) % mod
ans0 = n * (n+1) // 2 % mod
ans = ((ans - ans0) * pow(2, -1, mod) + ans0) % mod
print(ans)
kidodesu