Используя решение Marcog, я нашел образец, который начинается с n=16. Чтобы проиллюстрировать это, вот нажатия клавиш n=24до n=29, я заменил ^ A на S (выбрать), ^ C на C (копировать) и ^ V на P (вставить) для удобства чтения:
24: A,A,A,A,S,C,P,P,P,S,C,P,P,P,S,C,P,P,P,S,C,P,P,P
4 * 4 * 4 * 4 * 4 = 1024
25: A,A,A,A,S,C,P,P,P,S,C,P,P,S,C,P,P,S,C,P,P,S,C,P,P
4 * 4 * 3 * 3 * 3 * 3 = 1296
26: A,A,A,A,S,C,P,P,P,S,C,P,P,P,S,C,P,P,S,C,P,P,S,C,P,P
4 * 4 * 4 * 3 * 3 * 3 = 1728
27: A,A,A,A,S,C,P,P,P,S,C,P,P,P,S,C,P,P,P,S,C,P,P,S,C,P,P
4 * 4 * 4 * 4 * 3 * 3 = 2304
28: A,A,A,A,S,C,P,P,P,S,C,P,P,P,S,C,P,P,P,S,C,P,P,P,S,C,P,P
4 * 4 * 4 * 4 * 4 * 3 = 3072
29: A,A,A,A,S,C,P,P,P,S,C,P,P,P,S,C,P,P,P,S,C,P,P,P,S,C,P,P,P
4 * 4 * 4 * 4 * 4 * 4 = 4096
После начальных 4 As идеальный шаблон - выбрать, скопировать, вставить, вставить, вставить и повторить. Это умножит количество As на 4 каждые 5 нажатий клавиш. Если этот шаблон из 5 нажатий клавиш не может самостоятельно поглотить оставшиеся нажатия клавиш, некоторое количество из 4 шаблонов нажатий клавиш (SCPP) потребляют последние нажатия клавиш, заменяя SCPPP (или удаляя одну из вставок) по мере необходимости. Четыре комбинации нажатия клавиш умножают общую сумму на 3 каждые 4 нажатия.
Используя этот шаблон, вот некоторый код Python, который дает те же результаты, что и решение marcog, но редактирование O (1) : на самом деле это O (log n) из-за возведения в степень, спасибо IVlad за указание на это.
def max_chars(n):
if n <= 15:
return (0, 1, 2, 3, 4, 5, 6, 9, 12, 16, 20, 27, 36, 48, 64, 81)[n]
e3 = (4 - n) % 5
e4 = n // 5 - e3
return 4 * (4 ** e4) * (3 ** e3)
Вычисление e3:
в конце списка нажатий клавиш всегда есть от 0 до 4 шаблонов SCPP, поскольку n % 5 == 4их 4, n % 5 == 13, n % 5 == 22, n % 5 == 31 и n % 5 == 40. Это можно упростить до (4 - n) % 5.
Вычисление e4:
общее количество паттернов увеличивается на 1 всякий раз n % 5 == 0, когда оказывается, что это число увеличивается ровно n / 5. Используя разделение этажей, мы можем получить общее количество шаблонов, общее количество для e4- это общее количество шаблонов за вычетом e3. Для тех, кто не знаком с Python, //это ориентированная на будущее нотация для разделения этажей.
^Aобычно бывает «выбрать все»,^C«копировать»,^V«вставить». Это дает вам представление?