結果
| 問題 | No.3021 Maximize eval |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-02-19 11:20:25 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 126 ms / 2,000 ms |
| コード長 | 2,408 bytes |
| 記録 | |
| コンパイル時間 | 621 ms |
| コンパイル使用メモリ | 82,776 KB |
| 実行使用メモリ | 111,000 KB |
| 最終ジャッジ日時 | 2025-02-19 11:20:38 |
| 合計ジャッジ時間 | 4,020 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 15 |
ソースコード
import sys
input = sys.stdin.readline
def solve():
T = int(input().strip())
for _ in range(T):
S = input().strip()
n = len(S)
res = []
# last_was_op: 直前が演算子なら True
last_was_op = True # 最初は必ず数字で始まる
# cur_sign: 現在作っている数が + なら 1, - なら -1
cur_sign = 1
for i, c in enumerate(S):
if c != '?':
res.append(c)
if c == '+' or c == '-':
last_was_op = True
cur_sign = 1 if c == '+' else -1
else:
last_was_op = False
else:
# c == '?'
if last_was_op:
# 数の先頭なので、数字を入れる必要がある
if cur_sign == 1:
res.append('9')
else:
res.append('1')
last_was_op = False
else:
# 直前が数字の場合:数字を続けるか、演算子で区切るか
if i == n - 1:
# 最後の文字は必ず数字
res.append('9' if cur_sign == 1 else '1')
last_was_op = False
else:
if cur_sign == 1:
# 加算側なら、数字を続けて数を大きくする
res.append('9')
last_was_op = False
else:
# 減算側なら、可能ならここで数を区切って符号を正にリセット
next_char = S[i+1]
if next_char in '+-':
# 次が演算子なら連続演算子になるので、数字(最小値)を入れる
res.append('1')
last_was_op = False
else:
# ここで区切り、'+' を入れて符号を正にする
res.append('+')
last_was_op = True
cur_sign = 1
sys.stdout.write("".join(res) + "\n")
if __name__ == '__main__':
solve()