結果
問題 | 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 sysinput = sys.stdin.readlinedef solve():T = int(input().strip())for _ in range(T):S = input().strip()n = len(S)res = []# last_was_op: 直前が演算子なら Truelast_was_op = True # 最初は必ず数字で始まる# cur_sign: 現在作っている数が + なら 1, - なら -1cur_sign = 1for i, c in enumerate(S):if c != '?':res.append(c)if c == '+' or c == '-':last_was_op = Truecur_sign = 1 if c == '+' else -1else:last_was_op = Falseelse:# c == '?'if last_was_op:# 数の先頭なので、数字を入れる必要があるif cur_sign == 1:res.append('9')else:res.append('1')last_was_op = Falseelse:# 直前が数字の場合:数字を続けるか、演算子で区切るかif i == n - 1:# 最後の文字は必ず数字res.append('9' if cur_sign == 1 else '1')last_was_op = Falseelse:if cur_sign == 1:# 加算側なら、数字を続けて数を大きくするres.append('9')last_was_op = Falseelse:# 減算側なら、可能ならここで数を区切って符号を正にリセットnext_char = S[i+1]if next_char in '+-':# 次が演算子なら連続演算子になるので、数字(最小値)を入れるres.append('1')last_was_op = Falseelse:# ここで区切り、'+' を入れて符号を正にするres.append('+')last_was_op = Truecur_sign = 1sys.stdout.write("".join(res) + "\n")if __name__ == '__main__':solve()