結果
| 問題 |
No.873 バイナリ、ヤバいなり!w
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-09 21:04:58 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,748 bytes |
| コンパイル時間 | 166 ms |
| コンパイル使用メモリ | 82,220 KB |
| 実行使用メモリ | 83,528 KB |
| 最終ジャッジ日時 | 2025-04-09 21:06:35 |
| 合計ジャッジ時間 | 7,232 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 16 WA * 20 |
ソースコード
import math
def main():
N = int(input())
if N == 0:
print("0")
return
dp_sum = [float('inf')] * (N + 1)
dp_prev = [-1] * (N + 1)
dp_sum[0] = 0
for n in range(1, N + 1):
max_k = int(math.isqrt(n))
for k in range(1, max_k + 1):
m = n - k * k
if m < 0:
continue
if dp_sum[m] + k < dp_sum[n]:
dp_sum[n] = dp_sum[m] + k
dp_prev[n] = k
a_list = []
current_n = N
while current_n > 0:
a = dp_prev[current_n]
a_list.append(a)
current_n -= a * a
a_list_sorted = sorted(a_list)
sequence = []
current_start = 0
sorted_available = a_list_sorted.copy()
while sorted_available:
found = False
for i in range(len(sorted_available)):
candidate = sorted_available[i]
if candidate % 2 == 1:
end_char = current_start
else:
end_char = 1 - current_start
sequence.append(candidate)
current_start = end_char
del sorted_available[i]
found = True
break
if not found:
print("error")
return
binary = []
current_segment_start = 0
for a in sequence:
fragment = []
for i in range(a):
fragment.append('0' if (current_segment_start ^ (i % 2)) == 0 else '1')
binary.append(''.join(fragment))
if a % 2 == 0:
current_segment_start = 1 - current_segment_start
else:
current_segment_start = current_segment_start
print(''.join(binary))
if __name__ == "__main__":
main()
lam6er