SPOJ podaje Ci konkretny błąd wykonania (SIGFPE) i link do jego opisu:
SIGFPE
The SIGFPE signal is sent to a process when it executes an erroneous arithmetic operation, such as division by zero (the name "FPE", standing for floating-point exception, is a misnomer as the signal covers integer-arithmetic errors as well).
Gdzieś w kodzie wykonało się dzielenie przez zero. Będzie tak tylko w sytuacji gdy liczba uczniów w klasie bez solenizanta będzie wynosić 0. W takiej sytuacji zbierze on wszystkie cukierki - musisz uwzględnić taką możliwość. Cukierków będzie więcej niż 0 więc nie trzeba się martwić niczym innym.
Dodatkowo masz błąd w instrukcji warunkowej pomyliłeś zmienne. Powinno być:
if (c - l * p != 0) // c, l podmienione
// liczba cukierków - liczba uczniów * liczba cukierków na ucznia != 0
Uwzględniając te uwagi powinieneś otrzymać poprawny wynik.
Dodatkowo: Resztę z dzielenia możesz łatwo otrzymać korzystając z operacji modulo:
if (c % l != 0)