zamazan4ik's blog

By zamazan4ik, 9 years ago, In Russian

Доброго времени суток, уважаемые форумчане. ВОзникла сложность с одной задачей и я прошу у вас помощи.

Задача: Ограничения : Время работы — 1 секунда Огрничение по памяти — 256 мб.

Недавно на уроке во время контрольной Мария Ивановна перехватила записку Саше от Оли. Мария Ивановна очень хочет знать, что в записке, но, к сожалению, записка зашифрована. Мария Ивановна знает, что её ученики для шифровки заменяют каждую букву исходного сообщения на какую-то другую. Замена происходит таким образом, что одинаковые буквы всегда заменяются одной и той же буквой, а разные — разными.

Мария Ивановна подозревает, что записка — это ответы к контрольному тесту (ведь её длина случайно оказалась равной длине строки с правильными ответами). Однако она знает, что ответы Оли не обязательно полностью правильны. На каждый вопрос возможен один из K вариантов ответа. Естественно, Мария Ивановна знает правильные ответы.

Мария Ивановна решила расшифровать записку таким способом, чтобы максимизировать количество правильных ответов Оли. Однако, она очень занята, поэтому попросила Вас помочь ей в этом пустяковом деле.

Входные данные

В первой строке задана длина каждой из строк N (1 ≤ N ≤ 2 000 000) и K — количество возможных ответов на каждый вопрос (1 ≤ K ≤ 52). Ответы нумеруются в порядке abcde...xyzABCDE...XYZ. То есть, при K = 6 возможные ответы выглядят как abcdef, а при K = 30 "— abcde...xyzABCD.

Во второй строке задана зашифрованная записка — строка, состоящая из строчных и заглавных латинских букв.

В третьей строке заданы правильные ответы — строка той же длины, что и первая, состоящая из строчных и заглавных латинских букв.

Выходные данные

В первой строке выведите единственное число — максимально возможное количество правильных ответов у Оли.

Во второй строке выведите расшифровку — строчку длины K, где по порядку для каждой буквы из шифра учеников указано, какому ответу она соответствует.

Если несколько расшифровок дают правильный ответ, выведите любую.

Очень прошу вас помочь!

  • Vote: I like it
  • +5
  • Vote: I do not like it

»
9 years ago, # |
  Vote: I like it +1 Vote: I do not like it

For each pair of letters (x1, x2) you know how much points you are going to get if you use mapping x1 -> x2. For example, if your strings are:

aaabbb
aabbba

Then by using mapping a -> a, you get 2 extra points, but when you use a -> b you get 1 point (and the problem asks you to find mappings for each letter so that the number of correct answers is maximized).

So your problem is equivalent to finding best assignment for each letter, e.g.

  a b c
a *
b     *
c   *

And then there's this: http://e-maxx.ru/algo/assignment_hungary

I hope this helps :)

  • »
    »
    9 years ago, # ^ |
      Vote: I like it +5 Vote: I do not like it

    ohhh my god... I thought about this. But I badly know Hungarian algortihm... My bad.

    Thank you very much! I am a little bit stupid :)

    Sorry for my poor English!