結果
問題 | No.873 バイナリ、ヤバいなり!w |
ユーザー |
![]() |
提出日時 | 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()