結果
問題 |
No.3024 全単射的
|
ユーザー |
![]() |
提出日時 | 2025-04-16 15:51:16 |
言語 | PyPy3 (7.3.15) |
結果 |
RE
|
実行時間 | - |
コード長 | 2,120 bytes |
コンパイル時間 | 227 ms |
コンパイル使用メモリ | 82,400 KB |
実行使用メモリ | 67,004 KB |
最終ジャッジ日時 | 2025-04-16 15:52:03 |
合計ジャッジ時間 | 2,408 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | RE * 22 |
ソースコード
import sys memo = {} def compute_results(nums): key = tuple(sorted(nums)) if key in memo: return memo[key] if len(nums) == 1: memo[key] = {nums[0]} return memo[key] res = set() for i in range(len(nums)): for j in range(i + 1, len(nums)): a, b = nums[i], nums[j] remaining = [nums[k] for k in range(len(nums)) if k != i and k != j] # a + b s = a + b new_nums = remaining + [s] res.update(compute_results(new_nums)) # a - b s = a - b new_nums = remaining + [s] res.update(compute_results(new_nums)) # b - a s = b - a new_nums = remaining + [s] res.update(compute_results(new_nums)) # a * b s = a * b new_nums = remaining + [s] res.update(compute_results(new_nums)) # a / b if b != 0: s = a / b new_nums = remaining + [s] res.add(s) res.update(compute_results(new_nums)) # b / a if a != 0: s = b / a new_nums = remaining + [s] res.add(s) res.update(compute_results(new_nums)) memo[key] = res return res def main(): n = int(sys.stdin.readline()) A = list(map(int, sys.stdin.readline().split())) masks = [] for mask in range(1, (1 << n) - 1): complement = ((1 << n) - 1) ^ mask if mask > complement: continue size = bin(mask).count('1') masks.append((size, mask)) masks.sort() found = False for size, mask in masks: S = [] T = [] for k in range(n): if (mask >> k) & 1: S.append(A[k]) else: T.append(A[k]) res_S = compute_results(S) res_T = compute_results(T) if res_S & res_T: found = True break print("YES" if found else "NO") if __name__ == "__main__": main()