Feladat: I/S.22 Korcsoport: - Nehézségi fok: -
Füzet: 2017/december, 557. oldal  PDF  |  MathML 
Témakör(ök): Nehezebb feladat, Programozás, algoritmusok

A szöveg csak Firefox böngészőben jelenik meg helyesen. Használja a fenti PDF file-ra mutató link-et a letöltésre.

Egy N hosszúságú, egységnégyzetekből álló szalagon korongok helyezkednek el. Minden korong egy-egy négyzetben van, ugyanakkor egy négyzetben legföljebb egy korong található, vagy a négyzet üres. A szalag első P négyzetében piros korongok találhatók, míg utolsó K négyzetében kékek. Célunk az, hogy a piros, valamint a kék korongokat a szalag tőlük távolabbi végéhez sorakoztassuk föl. Akkor teljesítettük a feladatunkat, ha a szalag első K számú négyzetében kék, az utolsó P számú négyzetében piros korong található.
A korongokkal kétféle mozgatást tudunk végezni bármelyik irányba. Az egyik lehetőség, hogy egy koronggal a szomszédos üres négyzetre lépünk. A másik lehetőség, hogy egy koronggal a szomszédos korongon át a következő szomszédos, üres mezőre ugrunk. Több korongot vagy üres négyzetet nem lehet átugrani, de bármelyik korong átugorhatja bármelyik másikat függetlenül a színétől.
Készítsünk programot, amely megadja, hogy legkevesebb hány mozgással teljesíthetjük a célt, amely mindig teljesíthető. A program standard bemenete az N, K és P egészek. A program standard kimenete egy sorban a szükséges legkevesebb mozgások, majd azon belül az ugrások és a lépések száma.
Példák:

 
BemenetKimenet   3 1 13 1 2   6 2 210 6 4   
 

Korlátok: 1P<P+K<N1000.
Értékelés: a megoldás lényegét leíró dokumentáció 1 pontot ér. További 9 pont kapható arra a programra, amely a korlátoknak megfelelő bemenetekre helyes kimenetet ad 1 másodperc futásidő alatt. Részpontszám kapható arra a programra, amely csak N10, N30, N100 értékek esetén ad helyes eredményt 1 másodpercen belül.
Beküldendő egy is22.zip tömörített állományban a megoldást leíró dokumentáció és a program forráskódja.