Используя решение 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 == 1
3, n % 5 == 2
2, n % 5 == 3
1 и n % 5 == 4
0. Это можно упростить до (4 - n) % 5
.
Вычисление e4:
общее количество паттернов увеличивается на 1 всякий раз n % 5 == 0
, когда оказывается, что это число увеличивается ровно n / 5
. Используя разделение этажей, мы можем получить общее количество шаблонов, общее количество для e4
- это общее количество шаблонов за вычетом e3
. Для тех, кто не знаком с Python, //
это ориентированная на будущее нотация для разделения этажей.
^A
обычно бывает «выбрать все»,^C
«копировать»,^V
«вставить». Это дает вам представление?