結果
問題 |
No.3024 全単射的
|
ユーザー |
![]() |
提出日時 | 2025-06-12 21:31:10 |
言語 | PyPy3 (7.3.15) |
結果 |
RE
|
実行時間 | - |
コード長 | 2,522 bytes |
コンパイル時間 | 394 ms |
コンパイル使用メモリ | 82,432 KB |
実行使用メモリ | 65,536 KB |
最終ジャッジ日時 | 2025-06-12 21:31:54 |
合計ジャッジ時間 | 3,062 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | RE * 22 |
ソースコード
import itertools memo = {} def get_results(nums): key = tuple(nums) if key in memo: return memo[key] if len(nums) == 1: res = {round(nums[0], 6)} memo[key] = res return res results = set() for i in range(len(nums)): for j in range(len(nums)): if i != j: a = nums[i] b = nums[j] # 加法 new_num = a + b new_nums = [nums[k] for k in range(len(nums)) if k != i and k != j] new_nums.append(new_num) sub_results = get_results(new_nums) for res in sub_results: results.add(res) # 减法 new_num = a - b new_nums = [nums[k] for k in range(len(nums)) if k != i and k != j] new_nums.append(new_num) sub_results = get_results(new_nums) for res in sub_results: results.add(res) # 乘法 new_num = a * b new_nums = [nums[k] for k in range(len(nums)) if k != i and k != j] new_nums.append(new_num) sub_results = get_results(new_nums) for res in sub_results: results.add(res) # 除法 if b != 0: new_num = a / b new_nums = [nums[k] for k in range(len(nums)) if k != i and k != j] new_nums.append(new_num) sub_results = get_results(new_nums) for res in sub_results: results.add(res) memo[key] = results return results def main(): import sys n = int(sys.stdin.readline()) nums = list(map(int, sys.stdin.readline().split())) found = False for perm in itertools.permutations(nums): for i in range(1, len(perm)): left = list(perm[:i]) right = list(perm[i:]) left_results = get_results(left) right_results = get_results(right) for l in left_results: for r in right_results: if abs(l - r) < 1e-6: found = True break if found: break if found: break if found: break if found: print("YES") else: print("NO") if __name__ == "__main__": main()