結果
| 問題 |
No.3024 全単射的
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 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()
lam6er