• Предмет: Информатика
  • Автор: shmelfootball17
  • Вопрос задан 4 месяца назад

Дана строка-шаблон t и n символьных строк si (|si
| = |t|). Для каждого k от 0 до |t| выведите
ответ на вопрос:
• если мы заменим не более k символов в строке-шаблоне t на «?», чему будет равно количество
строк si
, подходящих под этот шаблон?
Строка si подходит под шаблон t, если на всех позициях, где в t стоит буква, такая же буква
стоит в si
. На позициях, где в t стоит «?», в si может стоять любая буква.
Формат входных данных
В первой строке ввода содержится символьная строка t (1 6 |t| 6 16), состоящая из строчных
букв латинского алфавита и символов «?».
Во второй строке содержится одно целое число n (1 6 n 6 2 · 105
) — количество строк si
.
В следующих n строках ввода содержатся символьные строки si (|si
| = |t|), состоящие из строчных букв латинского алфавита.
Формат выходных данных
В единственной строке выведите |t| + 1 число — ответ для всех k (0 6 k 6 |t|).

Ответы

Ответ дал: ilyav1nokurov
0

Дана строка-шаблон t и n символьных строк si (|si

| = |t|). Для каждого k от 0 до |t| выведите

ответ на вопрос:

• если мы заменим не более k символов в строке-шаблоне t на «?», чему будет равно количество

строк si

, подходящих под этот шаблон?

Строка si подходит под шаблон t, если на всех позициях, где в t стоит буква, такая же буква

стоит в si

. На позициях, где в t стоит «?», в si может стоять любая буква.

Формат входных данных

В первой строке ввода содержится символьная строка t (1 6 |t| 6 16), состоящая из строчных

букв латинского алфавита и символов «?».

Во второй строке содержится одно целое число n (1 6 n 6 2 · 105

) — количество строк si

.

В следующих n строках ввода содержатся символьные строки si (|si

| = |t|), состоящие из строчных букв латинского алфавита.

Формат выходных данных

В единственной строке выведите |t| + 1 число — ответ для всех k (0 6 k 6 |t|).

t = input()

n = int(input())

dp = [[[0 for _ in range(26)] for _ in range(26)] for _ in range(len(t) + 1)]

for j in range(26):

   dp[0][j][j] = n

for k in range(1, len(t) + 1):

   for i in range(1, k + 1):

       for j in range(26):

           if t[k - 1] != '?' and ord(t[k - 1]) != ord('a') + j:

               continue

           for l in range(26):

               dp[k][j][l] += dp[k - 1][j][l]

           if t[k - 1] == '?':

               for j2 in range(26):

                   dp[k][j][j2] += dp[k - 1][j2][l]

ans = []

for i in range(len(t) + 1):

   cnt = 0

   for j in range(26):

       for l in range(26):

           cnt += dp[len(t)][j][l] if i >= len(t) or t[i] == '?' or j == ord(t[i]) - ord('a') else 0

   ans.append(cnt)

print(*ans)

Вас заинтересует