Розбір для 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)
Коментарі