結果
| 問題 |
No.737 PopCount
|
| コンテスト | |
| ユーザー |
rlangevin
|
| 提出日時 | 2023-10-06 12:45:37 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 80 ms / 1,000 ms |
| コード長 | 1,124 bytes |
| コンパイル時間 | 952 ms |
| コンパイル使用メモリ | 82,048 KB |
| 実行使用メモリ | 76,596 KB |
| 最終ジャッジ日時 | 2024-07-26 15:22:47 |
| 合計ジャッジ時間 | 2,211 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 15 |
ソースコード
N = int(input())
mod = 10 ** 9 + 7
M = 65
ans = 0
def solve(k):
pre0 = [0] * M
pre1 = [0] * M
pre0[0] = 1
val = 0
for j in range(M):
n = (N >> (M - 1 - j)) & 1
dp0 = [0] * M
dp1 = [0] * M
for i in range(M):
if j == k:
if n:
if i:
dp0[i] += pre0[i - 1]
dp1[i] += pre1[i - 1]
else:
if i:
dp1[i] += pre1[i - 1]
continue
if n:
dp1[i] += pre0[i] + pre1[i]
if i:
dp0[i] += pre0[i - 1]
dp1[i] += pre1[i - 1]
else:
dp0[i] += pre0[i]
dp1[i] += pre1[i]
if i:
dp1[i] += pre1[i - 1]
dp0, pre0 = pre0, dp0
dp1, pre1 = pre1, dp1
two = 1 << (M - 1 - k)
for i in range(M):
val += two * (pre0[i] + pre1[i]) * i
val %= mod
return val
for k in range(M):
ans += solve(k)
ans %= mod
print(ans)
rlangevin