結果
問題 |
No.297 カードの数式
|
ユーザー |
![]() |
提出日時 | 2025-06-12 19:55:32 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,964 bytes |
コンパイル時間 | 148 ms |
コンパイル使用メモリ | 81,848 KB |
実行使用メモリ | 54,800 KB |
最終ジャッジ日時 | 2025-06-12 19:55:59 |
合計ジャッジ時間 | 3,228 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 1 TLE * 1 -- * 21 |
ソースコード
import sys from itertools import permutations def main(): input = sys.stdin.read().split() n = int(input[0]) cards = input[1:n+1] digits = [] ops = [] for c in cards: if c in '+-': ops.append(c) else: digits.append(c) o = len(ops) k = o + 1 m = len(digits) max_val = -float('inf') min_val = float('inf') def generate_splits(m, k): if k == 1: yield (m,) return for first in range(1, m - k + 2): for rest in generate_splits(m - first, k - 1): yield (first,) + rest splits = list(generate_splits(m, k)) for split in splits: seen_groups = set() for full_perm in permutations(digits): ptr = 0 groups = [] valid = True for s in split: if ptr + s > len(full_perm): valid = False break group_digits = full_perm[ptr:ptr+s] ptr += s if not group_digits: valid = False break groups.append(int(''.join(group_digits))) if not valid or ptr != len(full_perm): continue group_tuple = tuple(groups) if group_tuple in seen_groups: continue seen_groups.add(group_tuple) for op_perm in permutations(ops): expr = str(groups[0]) for i in range(len(op_perm)): expr += op_perm[i] + str(groups[i+1]) try: val = eval(expr) except: continue if val > max_val: max_val = val if val < min_val: min_val = val print(max_val, min_val) if __name__ == "__main__": main()