Решение задачи

Решение задачи


Алгоритм решения задачи:

Совет: для упрощения логики выполните предварительную обработку, чтобы предположить, что a >= b >= c.

При условии a >= b >= c: всегда пытайтесь добавить 'aa'. Если a - 2 >= b, добавьте 'b' (если нет, в следующем раунде будет добавлено 'bb'). Повторяйте рекурсивно для оставшихся отсчетов.

Другими словами, мы жадно используем два символа из самой большой кучи. Мы объединяем эти два символа с символом из средней кучи. Например, для [11,5,3] мы сначала генерируем 'aabaabaab', и наши кучи становятся [5,2,3]. В это время c становится средней кучей, и мы генерируем '..aac' ([3,2,2]). После добавления еще одного '...aa', c становится самой большой кучей, и мы извлекаем из нее два символа '...cc' ([1,2,0]). Мы добавляем оставшиеся '..bba', и в результате получаем строку 'aabaabaabaabaacaaccbba'.

Этот алгоритм может быть эзилистически доказан с помощью противоречия (и контрпримеров).


Report Page