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.
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)
Коментарі