Використовуючи розчин Маркога, я знайшов шаблон, який починається з 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 (або видаляючи одну з паст) за необхідності. 4 схеми натискання клавіш множать загальну кількість на 3 кожні 4 натискання клавіш.
Використовуючи цей шаблон тут деякі Python код , який отримує ті ж результати , як рішення marcog, але це O (1) редагувати : Це на самому справі O (журнал 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є "вставити". Це дає вам ідею?