結果
| 問題 | No.297 カードの数式 | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2015-11-06 16:28:23 | 
| 言語 | Python2 (2.7.18) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 13 ms / 1,000 ms | 
| コード長 | 1,773 bytes | 
| コンパイル時間 | 213 ms | 
| コンパイル使用メモリ | 6,784 KB | 
| 実行使用メモリ | 6,272 KB | 
| 最終ジャッジ日時 | 2024-12-26 02:12:49 | 
| 合計ジャッジ時間 | 1,637 ms | 
| ジャッジサーバーID (参考情報) | judge5 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 23 | 
ソースコード
# -*- coding: utf-8 -*-
N = int(raw_input())
nums = []
opes = []
for l in raw_input().split():
    if l.isdigit():
        nums.append(int(l))
    elif l in ["+", "-"]:
        opes.append(l)
    else:
        raise Exception()
nums.sort(reverse=True)
# + -> - にならべる
opes.sort()
def bestChoiceValue(nums, opes):
    N = len(nums)
    return int("".join(map(str, nums[:N - len(opes)])))
def maxValue(nums, opes):
    N = len(nums)
    total = bestChoiceValue(nums, opes)
    k = len(nums) - len(opes)
    for i in xrange(len(opes)):
        if opes[i] == "+":
            total += nums[k + i]
        else:
            total -= nums[k + i]
    return total
def minValue(nums, opes):
    # -が1文字でもある場合
    if "-" in opes:
        # 並び替えて- -> + にする
        opes.reverse()
        total = -bestChoiceValue(nums, opes)
        k = len(nums) - len(opes)
        # 1つのマイナスは上で使用
        for i in xrange(1, len(opes)):
            j = k + i - 1
            if opes[i] == "+":
                total += nums[j]
            else:
                total -= nums[j]
        # 最小値は先頭に持ってくるためプラスにする
        total += nums[len(nums) - 1]
        return total
    else:
        # -がない場合
        i = 0
        digit = 1
        total = 0
        # 最小値を作るために大きい物から順に小さい桁に入れていく。
        while i < len(nums):
            j = 0
            while j < len(opes) + 1 and i < len(nums):
                total += nums[i] * digit
                i += 1
                j += 1
            # 次の桁へ
            digit *= 10
        return total
mx = maxValue(nums, opes)
mn = minValue(nums, opes)
print mx, mn
            
            
            
        