結果
問題 | No.332 数列をプレゼントに |
ユーザー |
![]() |
提出日時 | 2025-04-24 12:30:25 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,837 bytes |
コンパイル時間 | 563 ms |
コンパイル使用メモリ | 82,752 KB |
実行使用メモリ | 83,960 KB |
最終ジャッジ日時 | 2025-04-24 12:31:47 |
合計ジャッジ時間 | 9,180 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 35 TLE * 1 -- * 6 |
ソースコード
def main(): import sys input = sys.stdin.read().split() idx = 0 N = int(input[idx]) idx += 1 X = int(input[idx]) idx += 1 A = list(map(int, input[idx:idx+N])) idx += N sum_total = sum(A) if sum_total < X: print("No") return B = [] for a in A: if a <= X: B.append(a) sum_B = sum(B) if sum_B < X: print("No") return ones_indices = [] non_ones = [] for i, a in enumerate(A): if a <= X: if a == 1: ones_indices.append(i) else: non_ones.append((a, i)) count_ones = len(ones_indices) sum_non_ones = sum(a for a, i in non_ones) lower_T = max(0, X - count_ones) upper_T = min(sum_non_ones, X) for T in range(lower_T, upper_T + 1): required_ones = X - T if required_ones < 0 or required_ones > count_ones: continue if not non_ones: if T == 0 and required_ones <= count_ones: res = ['x'] * N for i in range(required_ones): res[ones_indices[i]] = 'o' print(''.join(res)) return else: continue m = len(non_ones) first_half = non_ones[:m//2] second_half = non_ones[m//2:] sum_to_mask1 = {} for mask in range(0, 1 << len(first_half)): s = 0 for i in range(len(first_half)): if mask & (1 << i): s += first_half[i][0] if s not in sum_to_mask1: sum_to_mask1[s] = mask sum_to_mask2 = {} for mask in range(0, 1 << len(second_half)): s = 0 for i in range(len(second_half)): if mask & (1 << i): s += second_half[i][0] if s not in sum_to_mask2: sum_to_mask2[s] = mask found = False for s1 in sum_to_mask1: s2 = T - s1 if s2 in sum_to_mask2: mask1 = sum_to_mask1[s1] mask2 = sum_to_mask2[s2] indices = [] for i in range(len(first_half)): if mask1 & (1 << i): indices.append(first_half[i][1]) for i in range(len(second_half)): if mask2 & (1 << i): indices.append(second_half[i][1]) res = ['x'] * N for idx in indices: res[idx] = 'o' for i in range(required_ones): if i < len(ones_indices): res[ones_indices[i]] = 'o' print(''.join(res)) return print("No") if __name__ == "__main__": main()