|
|
| enter_andman |
09-02-2010 00:39 |
|
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?
|
|
|
|
| gosc |
09-02-2010 08:10 |
|
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
Ostatnio zmodyfikowany: 09-02-2010 12:46 przez quetzalcoatl
|
|
|
|
|
|