結果
問題 | No.3021 Maximize eval |
ユーザー |
|
提出日時 | 2025-02-14 21:29:44 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 238 ms / 2,000 ms |
コード長 | 2,798 bytes |
コンパイル時間 | 213 ms |
コンパイル使用メモリ | 12,288 KB |
実行使用メモリ | 16,180 KB |
最終ジャッジ日時 | 2025-02-14 21:30:03 |
合計ジャッジ時間 | 4,413 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 15 |
ソースコード
import sysS = sys.stdin.read().strip().splitlines()if not S:sys.exit(0)# S[0]~S[T] それぞれがテストケースT = int(S[0])ans = []line = 1for _ in range(T):s = S[line].strip()line += 1n = len(s)res = [] # 出力文字列のリストin_token = False # 現在数字(項)の中か# token_sign: 現在の項の符号(+1 か -1)# 項の開始は,先頭なら自動的に正とする.token_sign = 1token_len = 0 # 現在の項の長さ(数字の個数)for i, ch in enumerate(s):if ch != '?':# 固定文字の場合if ch in '+-':# ch は演算子res.append(ch)in_token = Falsetoken_len = 0# 演算子の意味するところで次の項の符号を決めるtoken_sign = 1 if ch=='+' else -1else:# ch は数字res.append(ch)# ここは数字でなければならないのでin_token = Truetoken_len += 1continue# ch == '?'# ここは自由に置換可能.if not in_token:# 「項の開始位置」では必ず数字を選ぶ.if token_sign > 0:res.append('9')else:res.append('1')in_token = Truetoken_len = 1else:# すでに項中if token_sign > 0:# 正の項なら,項を伸ばすほうが大きくなる.res.append('9')token_len += 1else:# 負の項ならできるだけ項は短いほうがよい.# もしすでに1桁以上あり,かつ「ここで項を終えて演算子にしてもよい」なら# ・末尾でなければ(i < n-1)# ・次の文字が固定の演算子でない(もし '?' ならあとで数字にできる)if token_len >= 1 and i < n-1 and s[i+1] not in '+-':# ここで項を終える.新しい項は演算子で始めるので,# 次の項は自由に正にできる(+ を選ぶ).res.append('+')in_token = Falsetoken_len = 0token_sign = 1else:# 終われないので,数字として延長.res.append('1')token_len += 1# 最後の文字は必ず数字になるように(状態が in_token=True であるはず)ans.append(''.join(res))sys.stdout.write("\n".join(ans))