Editorial for 2164: Мобільна гра


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.

Автор, розробник, автор розбору: 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)

Коментарі

Please read the guidelines before commenting.


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