結果
問題 |
No.332 数列をプレゼントに
|
ユーザー |
![]() |
提出日時 | 2025-06-12 14:29:25 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,329 bytes |
コンパイル時間 | 373 ms |
コンパイル使用メモリ | 82,364 KB |
実行使用メモリ | 102,692 KB |
最終ジャッジ日時 | 2025-06-12 14:29:50 |
合計ジャッジ時間 | 5,391 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 16 TLE * 1 -- * 25 |
ソースコード
n, X = map(int, input().split()) A = list(map(int, input().split())) # 创建包含值和原索引的列表,并按值从大到小排序 elements = [] for i in range(n): elements.append((A[i], i)) elements.sort(reverse=True, key=lambda x: x[0]) # 预计算从每个位置i到末尾的元素总和 sum_remain = [0] * (n + 1) for i in range(n-1, -1, -1): sum_remain[i] = sum_remain[i+1] + elements[i][0] selected = [] found = False def backtrack(i, current_sum): global found if found: return if current_sum == X: found = True return if current_sum > X or i >= n: return # 剪枝条件:剩下的元素总和不足以达到目标 if current_sum + sum_remain[i] < X: return # 尝试不选当前元素 backtrack(i+1, current_sum) if found: return # 尝试选中当前元素 new_sum = current_sum + elements[i][0] if new_sum > X: return # 剪枝条件:剩下的元素总和不足以达到目标 if new_sum + sum_remain[i+1] < X: return selected.append(elements[i][1]) backtrack(i+1, new_sum) if found: return selected.pop() backtrack(0, 0) if found: result = ['x'] * n for idx in selected: result[idx] = 'o' print(''.join(result)) else: print("No")