Submission #6439897


Source Code Expand

from bisect import bisect_left
S = input()
K = int(input())
L = len(S)

V = [[] for _ in range(26)]
for i, s in enumerate(S):
    V[ord(s) - ord('a')].append(i)

# dp = [{a: 0 for a in map(chr, range(ord('a'), ord('z')+1))} for _ in range(L+1)]
dp = [[0 for _ in range(26)] for _ in range(L+1)]
dp[1][ord(S[-1]) - ord('a')] = 1

cum = 0
for i in range(2,L+1):
    s = ord(S[-i]) - ord('a')
    dp[i][s] = 1
    # for abc in map(chr, range(ord('a'), ord('z')+1)):
    for abc in range(26):
        dp[i][abc] += dp[i-1][abc]
        # if dp[i-1].get(abc):
        if dp[i-1][abc]:
            dp[i][s] += dp[i-1][abc]
    dp[i][s] -= dp[i-1][s]
    cum += dp[i][s] - 1

ans = []
if cum >= K:
    cnt = K
    pos = 0
    while cnt > 0 and pos < L:
        # for abc in map(chr, range(ord('a'), ord('z')+1)):
        for abc in range(26):
            if cnt - dp[-pos-1][abc] > 0:
                cnt -= dp[-pos-1][abc]
            else:
                ans.append(chr(abc + ord('a')))
                # pos = S.find(ans[-1], pos) + 1
                pos = V[abc][bisect_left(V[abc], pos)] + 1
                cnt -= 1
                break

print(''.join(ans) or 'Eel')

Submission Info

Submission Time
Task G - 辞書順
User qython
Language Python (3.4.3)
Score 0
Code Size 1211 Byte
Status TLE
Exec Time 2122 ms
Memory 292672 KB

Judge Result

Set Name All
Score / Max Score 0 / 4
Status
AC × 3
TLE × 1
MLE × 1
Set Name Test Cases
All 00, 01, 02, 90, 91
Case Name Status Exec Time Memory
00 TLE 2122 ms 292672 KB
01 MLE 615 ms 271096 KB
02 AC 18 ms 3064 KB
90 AC 18 ms 3064 KB
91 AC 18 ms 3064 KB