Автор: Андрій Холод
Роздробник: Павло Цікалишин
Розбір підготовано: Костянтин Денисов
Потрібно розбити масив a_1,\dots,a_n на m=k+1 послідовних частин так, щоб сума в кожній частині була однакова, і використати всі шматки. Нехай S=\sum_{i=1}^n a_i. Тоді кожна частина має вагу T=S/m, отже обов'язково m \mid S.
Через те, що n \le 5000, можна зробити дуже просту перевірку: перебрати всі можливі від найбільшого до і перевірити, чи можна нарізати на частин сумою жадібно зліва направо. Оскільки ми знаємо наперед суму в кожній частині, то далі перший відрізок визначається однозначно, за ним другий і так далі.
Перевірка для фіксованого . Обчислюємо T=S/m і йдемо по масиву, накопичуючи та підраховуючи кількість друзів :
cur := cur + a_i.
якщо cur = T, то "закриваємо" частину: cnt := cnt + 1, cur := 0;
якщо cur > T, то таке неможливе (бо всі a_i \ge 1 і ми вже перебрали суму).
В кінці потрібно, щоб cur=0 і cnt=m.
Складність. Перебираємо не більше ніж разів, кожна перевірка за , отже загалом O(n^2). За n \le 5000 це проходить. Пам'ять .