Zadanko sprowadza się do jednej pętli for, z maks 10 linijkami.
Idziesz sobie forem po szklankach od tej o idx-ie 0, do tej o idx-ie n-2. W A[i] trzymasz poziom wody aktualnie w szklance. Na początku wczytujesz to z wejścia. Zauważ, że tutaj jedyne opcje jakie masz to przelanie do sąsiada z jednej strony. Nie ma tak, że do szklanki o idx-ie 0 możesz przelać z tej o idx-ie 1 i n-1, tylko jest tak, że opcje masz tylko z szklanki o idx-ie 1.
K = suma_na_wejsciu / n (tyle na końcu musi być w każdej szklance)
1 - I teraz jeśli A[i] == K, to zostawiasz, nie opłaca ci się przelwać
2 - Jeśli A[i] > K, to musisz przelać wodę do szklanki o idx-ie i+1, skoro w wszystkich na lewo(tych o mniejszych idx-ach woda już pasi)
3 - Jesli A[i] < K, to musisz przelac wodę z szklanki o idx-ie i+1 do tej o idxie i.
Przy przelewaniu dodajesz do wyniku 1
Zauważ, że for (int i = 0; i < n-1; ++i), bo w szklance o idxie n-1 już po wykonaniu tego algorytmu będzie dokładnie K wody. Oczywiście o ile dane na wejściu są poprawne (ale to chyba mamy zagwarantowane (mi tym sposobem przeszło na 100, więc chyba jest zagwarantowane))
Ciekawe jest zadanie:
https://szkopul.edu.pl/problemset/problem/xApOd_fcsVrm_DV7HljFbLWq/site/?key=statement
Gdzie można przelewać z obu stron(do szklanki o idx-ie 0 możesz przelać z szklanki o idxie 1 i też o idxie n-1). Męczyłem się kiedyś z tym, ale nie umiałem tego zrobić.