結果
| 問題 |
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