結果
| 問題 |
No.297 カードの数式
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-11-06 23:33:15 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 38 ms / 1,000 ms |
| コード長 | 1,119 bytes |
| コンパイル時間 | 263 ms |
| コンパイル使用メモリ | 12,672 KB |
| 実行使用メモリ | 10,624 KB |
| 最終ジャッジ日時 | 2024-12-26 02:16:23 |
| 合計ジャッジ時間 | 2,070 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 23 |
ソースコード
N = int(input())
cs = list(input().split())
nums = [int(c) for c in cs if c not in '+-']
plus = cs.count('+')
minus = cs.count('-')
def find_max(nums, plus, minus):
nums.sort(reverse=True)
cum = 0
for i in range(minus):
cum -= nums.pop()
for i in range(plus):
cum += nums.pop()
tmp = 0
for n in nums:
tmp *= 10
tmp += n
return cum + tmp
def find_min(nums, plus, minus):
if minus == 0:
return find_min0(nums, plus)
nums.sort(reverse=True)
cum = 0
for i in range(plus + 1):
cum += nums.pop()
for i in range(minus - 1):
cum -= nums.pop()
tmp = 0
for n in nums:
tmp *= 10
tmp += n
return cum - tmp
def find_min0(nums, plus):
nums.sort(reverse = True)
m, r = divmod(len(nums), plus + 1)
cum = 0
pow10 = 10 ** m
for i in range(r):
cum += pow10 * nums.pop()
for i in range(m):
pow10 //= 10
for j in range(plus + 1):
cum += pow10 * nums.pop()
return cum
print(*(find_max(nums[:], plus, minus), find_min(nums[:], plus, minus)))