結果
問題 |
No.3114 0→1
|
ユーザー |
|
提出日時 | 2025-04-20 03:39:26 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,979 bytes |
コンパイル時間 | 328 ms |
コンパイル使用メモリ | 12,288 KB |
実行使用メモリ | 10,368 KB |
最終ジャッジ日時 | 2025-04-20 03:39:29 |
合計ジャッジ時間 | 2,383 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | WA * 3 |
other | WA * 30 |
ソースコード
def min_operations_to_make_good(s): n = len(s) s_list = list(s) operations = 0 def is_good_string(string): prefix_zeros = [0] prefix_ones = [0] for ch in string: if ch == '0': prefix_zeros.append(prefix_zeros[-1] + 1) prefix_ones.append(prefix_ones[-1]) else: prefix_zeros.append(prefix_zeros[-1]) prefix_ones.append(prefix_ones[-1] + 1) for i in range(n): for j in range(i+1, n): if j - i >= 1: zeros = prefix_zeros[j+1] - prefix_zeros[i] ones = prefix_ones[j+1] - prefix_ones[i] if zeros > ones: return False return True if is_good_string(s_list): return 0 while not is_good_string(s_list): best_pos = -1 max_improvement = -1 for i in range(n): if s_list[i] == '0': s_list[i] = '1' if is_good_string(s_list): operations += 1 return operations improvement = 0 for start in range(n): for end in range(start+1, n): if end - start >= 1: zeros = s_list[start:end+1].count('0') ones = s_list[start:end+1].count('1') if zeros <= ones: improvement += 1 s_list[i] = '0' if improvement > max_improvement: max_improvement = improvement best_pos = i s_list[best_pos] = '1' operations += 1 return operations test_cases = [ "01001", "1010010001" ] for s in test_cases: print(min_operations_to_make_good(s))