結果

問題 No.297 カードの数式
ユーザー gew1fw
提出日時 2025-06-12 15:06:24
言語 PyPy3
(7.3.15)
結果
TLE  
実行時間 -
コード長 1,964 bytes
コンパイル時間 163 ms
コンパイル使用メモリ 82,228 KB
実行使用メモリ 53,632 KB
最終ジャッジ日時 2025-06-12 15:07:24
合計ジャッジ時間 3,458 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 1 TLE * 1 -- * 21
権限があれば一括ダウンロードができます

ソースコード

diff #

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()
0