Розбір для 2164: Мобільна гра


Памʼятайте, що цей розбір слід використовувати лише коли ви застрягли, і не копіювати код з нього. Будь ласка, поважайте автора задачі та автора розбору.
Надсилання офіційного розвʼязку до того, як ви самі розвʼяжете задачу, є порушенням, за яке можна отримати блокування.

Автор, розробник, автор розбору: Iлля Пермяков

Помiтимо, що звичайну атаку завжди можна використати на усьому вiдрiзку, оскiльки ~min(c1, c2, . . . , cn) ⩾ 1~. Якщо ми застосовуватимемо суператаку, то її треба застосувати на найдовшому безперервному вiдрiзку з двiйок. Довжину цього вiдрiзка можна знайти за допомогою методу двох покажчикiв. Нехай довжина цього вiдрiзка буде ~L~. Тодi вiдповiддю на задачу буде ~max(n, 2·L)~.

n = int(input())
a = list(map(int, input().split()))

best_run = cur = 0
for x in a:
    if x == 2:
        cur += 1
        if cur > best_run:
            best_run = cur
    else:
        cur = 0

ans = max(n, 2 * best_run)
print(ans)

Коментарі

Будь ласка, прочитайте правила перед коментуванням.


Наразі коментарів немає.