結果
| 問題 | No.3290 Encrypt Failed, but Decrypt Succeeded | 
| コンテスト | |
| ユーザー |  ゼット | 
| 提出日時 | 2025-10-03 22:20:20 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 202 ms / 2,000 ms | 
| コード長 | 1,974 bytes | 
| コンパイル時間 | 354 ms | 
| コンパイル使用メモリ | 82,736 KB | 
| 実行使用メモリ | 119,344 KB | 
| 最終ジャッジ日時 | 2025-10-03 22:20:25 | 
| 合計ジャッジ時間 | 5,408 ms | 
| ジャッジサーバーID (参考情報) | judge3 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 27 | 
ソースコード
N,K=map(int,input().split())
S=input()
v=[1]*(N+1)
for i in range(2,N+1):
  v[i]=v[i-1]+v[i-2]
  if v[i]>10**19:
    v[i]=10**19
h=[0]*(N+2)
h[N]=1
s=1
x=1
for i in range(N-1,-1,-1):
  if S[i]=='1':
    if i<N-1 and S[i+1]=='0':
      h[i]=h[i+2]
      continue
    h[i]=h[i+1]+h[i+2]
    if h[i]>10**19:
      h[i]=10**19
  elif S[i]=='2':
    if i<N-1 and S[i+1]=='0':
      h[i]=h[i+2]
    elif i<N-1 and int(S[i+1])<=6:
      h[i]=h[i+1]+h[i+2]
      if h[i]>10**19:
        h[i]=10**19
    else:
      h[i]=h[i+1]
  elif S[i]=='0':
    h[i]=0
  else:
    h[i]=h[i+1]
result=[]
now=0
rest=K-1
while True:
  if now==N-1:
    c=int(S[now])-1
    result.append(chr(ord('a')+c))
    now+=1
  else:
    if S[now]=='1':
      if S[now+1]=='0':
        c=int(S[now])*10+int(S[now+1])-1
        result.append(chr(ord('a')+c))
        now+=2
      elif now<N-2 and S[now+2]=='0':
        c=int(S[now])-1
        result.append(chr(ord('a')+c))
        now+=1
      else:
        if h[now+1]<=rest:
          rest-=h[now+1]
          c=int(S[now])*10+int(S[now+1])-1
          result.append(chr(ord('a')+c))
          now+=2
        else:
          c=int(S[now])-1
          result.append(chr(ord('a')+c))
          now+=1
    elif S[now]=='2':
      if S[now+1]=='0':
        c=int(S[now])*10+int(S[now+1])-1
        result.append(chr(ord('a')+c))
        now+=2
      elif now<N-2 and S[now+2]=='0':
        c=int(S[now])-1
        result.append(chr(ord('a')+c))
        now+=1
      elif int(S[now+1])<=6:
        if h[now+1]<=rest:
          rest-=h[now+1]
          c=int(S[now])*10+int(S[now+1])-1
          result.append(chr(ord('a')+c))
          now+=2
        else:
          c=int(S[now])-1
          result.append(chr(ord('a')+c))
          now+=1
      else:
        c=int(S[now])-1
        result.append(chr(ord('a')+c))
        now+=1
    else:
      c=int(S[now])-1
      result.append(chr(ord('a')+c))
      now+=1
  if now>=N:
    break
print(*result,sep='')
    
            
            
            
        