1896 - K Sir

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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()