Aug-5task.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. # Пройдя тестовое задание от куратора из предыдущей задачи, вы получили новое. На этой раз вам нужно улучшить систему поиска карточек в бухгалтерии Тинькофф.
  2. # Всего у нас работает nn людей. Каждый человек определяется своей фамилией, состоящей из строчных букв латинского алфавита (a, ..., z)(a,...,z). К сожалению, бумажные записи со временем становятся нечитаемыми, т.к. конец фамилии стирается, но команда бухгалтерии отлично знает систему хранения карточек и умеет находить любого сотрудника по префиксу его фамилии.
  3. # Для более быстрой работы дополнительно требуется знать kk-го в лексикографическом порядке человека среди всех с заданным префиксом. Задачу быстрого поиска такого человека и поставил перед вами куратор.
  4. # Формат входных данных
  5. # Первая строка задает два натуральных числа nn и qq (1 \leq n \leq 10^6, 1 \leq q \leq 10^4)(1≤n≤106,1≤q≤104) — количество людей и количество обращений к системе соответственно.
  6. # В следующих n строках находятся фамилии, состоящие из строчных букв латинского алфавита. Гарантируется, что суммарная длина строк не превосходит 10^6106 символов.
  7. # Последние q строк содержат запросы. Каждый запрос состоит из числа k_iki​ и строки s_isi​ (1 \leq i \leq q, 1\leq k_i \leq 10^9, 1 \leq s_i \leq 10^3)(1≤i≤q,1≤ki​≤109,1≤si​≤103), задающей префикс фамилии, среди которых нужно найти k_iki​-ю по порядку строку.
  8. # Формат выходных данных
  9. # На каждый запрос выведите одно число — порядковый номер найденной фамилии в исходном наборе или -1−1, если фамилии, подходящей под условие, не существует.
  10. digits = input().split()
  11. contacts = int(digits[0])
  12. num_requests = int(digits[1])
  13. last_names = [input() for i in range(contacts)]
  14. last_names_sort = sorted(last_names)
  15. requests = [input().split() for i in range(num_requests)]
  16. i = 0
  17. num_search = [0 for i in range(num_requests)]
  18. value_search = ["0" for i in range(num_requests)]
  19. while i < num_requests - 1:
  20. num_search[i] = int(requests[i][0])
  21. value_search[i] = requests[i][1]
  22. i += 1
  23. i = 0
  24. j = 0
  25. while i < num_requests - 1:
  26. while num_search[j] > 0:
  27. if last_names_sort[i].find(value_search[j]) == 0:
  28. num_search[j] -= 1
  29. i += 1
  30. if num_search[j] == 0:
  31. print(i + 1)
  32. else:
  33. print("-1")
  34. i = 0
  35. j += 1