結果

問題 No.1609 String Division Machine
ユーザー 👑 SPD_9X2
提出日時 2021-05-10 23:28:20
言語 PyPy3
(7.3.15)
結果
RE  
実行時間 -
コード長 2,260 bytes
コンパイル時間 357 ms
コンパイル使用メモリ 82,460 KB
実行使用メモリ 145,192 KB
最終ジャッジ日時 2024-07-06 07:53:05
合計ジャッジ時間 5,632 ms
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4 RE * 1
other AC * 35 RE * 2
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

"""
v1
"""
import bisect
def LIS(lis):
seq = []
for c in lis:
ind = bisect.bisect_left(seq,c)
if ind == len(seq):
seq.append(c)
else:
seq[ind] = c
return len(seq)
alp = "abcdefghijklmnopqrstuvwxyz?"
cd = {} #
for i in range(-1,26):
cd[alp[i]] = i
#N = int(input())
S = list(input())
#
#assert N == len(S)
for i in S:
assert i in cd
N = len(S)
#?
allq = True #?
for i in S:
if i != "?":
allq = False
break
if allq:
print ("a"*N)
sys.exit()
# dp[i][c] = ic?
dpA = [[0] * 26 for i in range(N+1)]
for i in range(N-1,-1,-1):
nmax = 0 #dpA[i][c] (c > j)
for j in range(25,-1,-1):
dpA[i][j] = max(dpA[i+1][j] , nmax)
if cd[S[i]] == j:
dpA[i][j] = max(dpA[i][j] , nmax + 1)
nmax = max(nmax , dpA[i][j])
OLIS = max(dpA[0]) #?LIS
"""
for i in dpA:
print (*i)
print (OLIS)
"""
ans = []
dpB = [[0] * 26 for i in range(N+1)] #iLISc
for i in range(N):
if S[i] != "?": #?
nc = cd[S[i]]
else: #?
for c in range(26):
if c == 0:
if dpA[i+1][c+1] + 1 <= OLIS:
nc = c
break
elif c != 25:
if dpB[i-1][c-1] + dpA[i+1][c+1] + 1 <= OLIS:
nc = c
break
else: #25
if dpB[i-1][c-1] + 1 <= OLIS:
nc = c
break
else:
print ("error",file=sys.stderr)
sys.exit(1)
ans.append(alp[nc])
nmax = 0
for j in range(26):
dpB[i][j] = max(dpB[i-1][j] , nmax)
if nc == j:
dpB[i][j] = max(dpB[i][j] , nmax + 1)
nmax = max(nmax , dpB[i][j])
assert LIS(ans) == OLIS
print ("".join(ans))
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0