結果

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

ソースコード

diff #

import itertools

def main():
    import sys
    sys.setrecursionlimit(1 << 25)
    N = int(sys.stdin.readline())
    cards = sys.stdin.readline().split()
    ops = [c for c in cards if c in '+-']
    digits = [c for c in cards if c.isdigit()]
    O = len(ops)
    D = len(digits)
    M = O + 1
    if M > D:
        print("0 0")
        return
    
    max_val = -float('inf')
    min_val = float('inf')
    
    for split_indices in itertools.combinations(range(1, D), M-1):
        blocks = []
        prev = 0
        for idx in split_indices:
            blocks.append(digits[prev:idx])
            prev = idx
        blocks.append(digits[prev:])
        
        for block_order in itertools.permutations(blocks):
            block_perms = []
            for block in block_order:
                perms = set(itertools.permutations(block))
                block_perms.append(perms)
            
            for block_comb in itertools.product(*block_perms):
                num_blocks = []
                for b in block_comb:
                    num = int(''.join(b))
                    num_blocks.append(num)
                
                for op_order in itertools.permutations(ops):
                    expr = [str(num_blocks[0])]
                    for i in range(len(op_order)):
                        expr.append(op_order[i])
                        expr.append(str(num_blocks[i+1]))
                    expr_str = ''.join(expr)
                    
                    try:
                        value = eval(expr_str)
                    except:
                        continue
                    
                    if value > max_val:
                        max_val = value
                    if value < min_val:
                        min_val = value
    
    print(f"{max_val} {min_val}")

if __name__ == "__main__":
    main()
0