plus k, potem modulo k - w jakim celu?

0

Witam,
ostatnio dla sportu rozwiązuje sobie zadania algorytmiczne z ACM. Z jednym mam szczególny problem ale znalazłem wzorcowe rozwiązanie na necie, które zostaje zaakceptowane przez sprawdzaczke rozwiązań. Nie rozumiem w tym rozwiązaniu tylko jednej linijiki, mianowicie:
map[i][(j- (abs(data[i])%k) +k )%k ]=true
a dokładnie fragmentu z dodawaniem k a potem braniem z tego modulo.
Zastanawia mnie czym to się różni od takiej linijki (bez dodawania k):
map[i][(j- (abs(data[i])%k) )%k ]=true

Okazuje się, że rozwiązanie bez dodawania k nie działa więc te 2 linijki nie są sobie równoważne [???]
to tak jakby
(x - y + k) mod k
nie było równoważne
(x - y) mod k

Czy ktoś może wie czym to się różni?

0

Pewnie piszesz w c badz c++ a tam operator modulo dla liczb ujemnych dziala troche inaczej - przykladowo:
(-1) mod 5 = -1 i pewnie z tych wzgledow dodajemy pozniej k i robimy jeszcze raz operacje mod k aby otrzymac wynik dodatni, taki jaki powinien byc.

//q: tak, dokladnie taki jest powod dodawania 'k' w ciemno - zeby wynikowa wartosc byla zawsze >= 0

1 użytkowników online, w tym zalogowanych: 0, gości: 1