結果
問題 | 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 sys S = sys.stdin.read().strip().splitlines() if not S: sys.exit(0) # S[0]~S[T] それぞれがテストケース T = int(S[0]) ans = [] line = 1 for _ in range(T): s = S[line].strip() line += 1 n = len(s) res = [] # 出力文字列のリスト in_token = False # 現在数字(項)の中か # token_sign: 現在の項の符号(+1 か -1) # 項の開始は,先頭なら自動的に正とする. token_sign = 1 token_len = 0 # 現在の項の長さ(数字の個数) for i, ch in enumerate(s): if ch != '?': # 固定文字の場合 if ch in '+-': # ch は演算子 res.append(ch) in_token = False token_len = 0 # 演算子の意味するところで次の項の符号を決める token_sign = 1 if ch=='+' else -1 else: # ch は数字 res.append(ch) # ここは数字でなければならないので in_token = True token_len += 1 continue # ch == '?' # ここは自由に置換可能. if not in_token: # 「項の開始位置」では必ず数字を選ぶ. if token_sign > 0: res.append('9') else: res.append('1') in_token = True token_len = 1 else: # すでに項中 if token_sign > 0: # 正の項なら,項を伸ばすほうが大きくなる. res.append('9') token_len += 1 else: # 負の項ならできるだけ項は短いほうがよい. # もしすでに1桁以上あり,かつ「ここで項を終えて演算子にしてもよい」なら # ・末尾でなければ(i < n-1) # ・次の文字が固定の演算子でない(もし '?' ならあとで数字にできる) if token_len >= 1 and i < n-1 and s[i+1] not in '+-': # ここで項を終える.新しい項は演算子で始めるので, # 次の項は自由に正にできる(+ を選ぶ). res.append('+') in_token = False token_len = 0 token_sign = 1 else: # 終われないので,数字として延長. res.append('1') token_len += 1 # 最後の文字は必ず数字になるように(状態が in_token=True であるはず) ans.append(''.join(res)) sys.stdout.write("\n".join(ans))