Усамљеност
Аутор: Владимир Миловановић
Текст и тест примери: Александар Вишњић
Анализа решења: Александар Вишњић
Тестирање: Драган Урошевић
Решење када N\leq 100
Пролазимо по поднизовима узастопних ученика преко две угнежђене петље. Затим за сваки подниз проверавамо да ли је усамљен или не. Број поднизова је O(N^2), а сложеност провере за сваки је O(N). Стога је укупна временска сложеност O(N^3).
Решење када N\leq 5\,000
Понављамо идеју претходног подзадатака - пролазимо по свим поднизовима. Проверу је неопходно извршити ефикасније. Најједноставније је то учинити наредним псеудо-кодом, у коме “успутно” рачунамо број математичара и физичара:
for (i in [1,N]):
br_mat=0
br_fiz=0
for (j in [i,N]):
if S[i] is 'M':
br_mat+=1
if S[i] is 'F':
br_fiz+=1
Временска сложеност је O(N^2).
Главно решење
Претходну итерацију замењујемо математичком формулом. За сваког ученика пребројавамо број слика које је поцепао. Приметимо да не постоји слика која је поцепана од стране два или више ученика, пошто свака слика дужине барем 3 има највише једног усамљеног ученика.
Нека су F_1 < F_2 < \ldots < F_K позиције свих физичара. За 1 < i < K важи да је физичар i поцепао слике које представљају под-интервале [L,R] \sub [F_{i-1}+1,F_{i+1}-1] који садрже i. Тачније, важи F_{i+1}+1 \leq L \leq F_i и F_i \leq R \leq F_{i+1}-1.
- За L имамо F_i - F_{i-1} опција;
- За R имамо F_{i+1}-F_i.
Како је избор L и R независан, укупан број избора је (F_i-F_{i-1}) \cdot (F_{i+1}-F_i) - 3. Одузимамо поднизове дужине мање од 3 (њих има тачно 3). Уколико је вредност израза негативна, узимамо 0 (дешава се да ученик не поцепа ниједну слику).
Приликом рачунања формуле, у случају i=1 можемо узети F_{i-1}=F_i, а у случају i=K можемо узети F_{i+1}=F_i.
Сада знамо како да за сваког физичара израчунамо број слика које је поцепао. Исти поступак примењујемо и за математичаре. Када све бројеве добијене као резултате формула просумирамо, добијамо коначан одговор. Сложеност наведеног решења је O(N).