1896 - K Sir

De la Universitas MediaWiki

Cerinţa

Fie S un șir de caractere cu litere mici și litere mari. Se sortează în ordine lexicografică toate subsecvențele distincte ale lui S. Se dă un număr K și un vector k cu K numere întregi, se cere pentru fiecare număr cel de ki -lea subșir lexicografic.

Date de intrare

Fișierul de intrare ksir.in conține pe prima linie un șir S, pe a doua linie un număr K, iar pe următoarea linie K numere naturale separate prin spații.

Date de ieșire

Fișierul de ieșire ksir.out va conține cele K șiruri de caractere, câte unul pe fiecare linie.

Restricţii şi precizări

  • |S| ≤ 200000
  • suma |ki | ≤ 200000

Exemplul 1

ksir.in
 FORR
 6
 1 1 2 3 4 5
ksir.out
 F
 F
 FO
 FOR
 FORR
 O

Explicație

Subsecvențele pentru FORR sunt {'F', 'FO', 'FOR', 'FORR', 'O', 'OR', 'ORR', 'R', 'RR'}.


Rezolvare

def generate_subsequences(s):
    subsequences = set()
    n = len(s)
    for i in range(n):
        for j in range(i+1, n+1):
            subsequences.add(s[i:j])
    return sorted(subsequences)

def main():
    with open("ksir.in", "r") as fin:
        s = fin.readline().strip()
        K = int(fin.readline().strip())
        k_values = list(map(int, fin.readline().split()))

    subsequences = generate_subsequences(s)

    with open("ksir.out", "w") as fout:
        for k in k_values:
            fout.write(subsequences[k - 1] + "\n")

if __name__ == "__main__":
    main()