CP2012 – Chomp
by Mithrandir
Prima problemă din cadrul concursului de programare pe 2012 este inspirată dintr-un joc matematic simplu.
Este vorba de Chomp. Ne vom opri la cazul 2D pentru problema actuală și-l vom modela exact ca în articol pe baza unei ciocolate (poftă bună :P) Ideea e simplă: se dă o ciocolată și cine mănâncă ultimul pătrățel din ea pierde jocul. În momentul în care selectezi un pătrățel pentru a-l mânca trebuie să mănânci toate pătrățelele la dreapta și în jos.
Matematic, problema este echivalentă cu a porni de la un șir de numere și a reduce pe rând numerele din șir păstrând o restricție de monotonie: la orice moment de timp șirul este descrescător (strict necrescător). Cel care este forțat să ajungă în poziția
pierde.
Teoria jocurilor clasifică toate pozițiile dintr-un joc cu informație totală în funcție de cine câștigă ca fiind safe (jucătorul care urmează să joace pierde) sau unsafe. Alternativ, definițiile sunt de (jucătorul care a ajuns în poziție câștigă) sau
(jucătorul care pleacă din poziție câștigă). Dintr-o poziție
se poate ajunge doar în poziții
în timp ce orice poziție
garantează existența unei mutări ce va duce într-o poziție
. Evident,
este o poziție
la fel ca și
.
Cerința problemei e simplă: fiind dată o listă de poziții în diverse jocuri de Chomp să se specifice dacă acestea sunt poziții sau
.
Fiecare poziție este specificată prin șirul valorilor și este dată pe un singur rând la standard input. De exemplu
2 2 1
3 1 1
2 1
2 2
reprezintă o intrare validă pentru programul vostru. Outputul trebuie să fie litera P sau N, câte una pe linie, corespunzătoare fiecărei poziții primite la intrare.
P
P
P
N
Există 100 de teste, fiecare o singură poziție.
Ponderea problemei în clasamentul final este 1.
Spor.
PS: Ar putea fi util și articolul de aici.
PPS: Ca istorie, problema asta m-a pasionat din liceu, din când în când mă mai jucam cu ea. Unii matematicieni oferă premiu pentru instanțele mai grele ale ei, dacă vă pasionează/atrage puteți să încercați.
Daca a ramas sa ne referim la problema cu ciocolata, de ce (2, 2) este N?
Jucatorul aflat la mutare are strategie sigura de castig.
E N dacă cel care mută câștigă. Primul jucător câștigă mereu (cel care pleacă de la
) e strategia pe wiki.
Altfel, strategia de câștig este să te duci mereu pe pozițiile P. Dacă există mutare spre un P atunci înseamnă că ești într-o poziție N. Cum primul jucător are strategie de câștig înseamnă că poziția de start e N.
In regula, are logica.
Salut care este strategia de castigare?Am gasit pe net doar niste articole axate pe cazuri particulare si cele care se refera la cazul general spun ca nu exista o statetie de castig, doar cateva sfaturi cum ar fi sa nu lasi dupa mutare un dreptunghi.
Se știe doar că primul poate câștiga, nu se știe și strategia. De asta este și problema un topic interesant.
Care sunt restrictiile de numere date ca parametru si timp?Am rezolvat-o muncitoreste generand toate combinatiile posibile de a se juca pe tabla data si timpul de executie este foarte mare
Voi testa cu lățimea maxim 10, dimensiuni între 10×16 si 3*1000. Voi lăsa programul să ruleze 30 de minute dacă e necesar.