Feladat: S.44 Korcsoport: - Nehézségi fok: -
Füzet: 2009/április, 233 - 234. oldal  PDF  |  MathML 
Témakör(ök): Nehezebb feladat

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.

Bergengóciában minden évben megrendezésre kerül a Nemzeti Villamoshajtó Bajnokság, a királyság legnevesebb versenysorozata. Ennek keretében minden nagyváros egy-egy versenyt rendez, melynek helyszíne a város leghosszabb villamospályája. A versenyzők egyesével indulnak, céljuk, hogy a lehető legrövidebb idő alatt végighaladjanak a pályán.
Bár a verseny ideje alatt az utasszállítás szünetel, a teljes közúti forgalmat még egy ekkora attrakció kedvéért sem lehet leállítani. A szörnyű balesetek elkerülése érdekében ezért a versenyzők a kereszteződéseknél a piros jelzésen a verseny során sem haladhatnak át.
Írjunk programot, mely meghatározza, hogy optimális esetben mennyi idő alatt teljesíthető a teljes táv. A program a pálya leírását fájlból olvassa, az eredményt fájlba írja. A bemeneti, illetve kimeneti fájlok nevei az első, illetve második parancssori argumentumok.
A villamos eleje az x=0 koordinátájú pontból indul a t=0 időpillanatban, és minden időegység kezdetén -1, 0, +1 egységgel változtathatja (pillanatszerűen) a sebességét, mellyel ezután egységnyi ideig egyenletesen halad az x tengely mentén. A villamos megállhat, de nem tolathat és nem is lépheti túl az M maximális sebességet.
A kereszteződéseknél a villamos elejének kell a zöld jelzésen áthaladni, a lámpa állapotaihoz balról nyílt, jobbról zárt időintervallumok tartoznak. (Tehát az éppen pirosra váltó lámpán a villamos még áthaladhat, de az éppen zöldre váltón még nem.) Célba érkezésnek azt a pillanatot tekintjük, amikor a villamos elejének x koordinátája megegyezik a pálya L hosszával.
A bemenet első sorában három, szóközzel elválasztott szám szerepel: a pálya 10L5000 hossza, a lámpák 0N1000 száma, illetve a villamos 1M30 végsebessége. Az ezt követő N db sor mindegyikében egy-egy lámpa leírása következik: a lámpa 1XiL pozíciója, állapotváltásainak 1Ci100 száma (de összesen legfeljebb 1000 állapotváltás), majd Ci db szám, az egyes piros-zöld állapotváltások 0Ti,j10000 időpontja, mind szóközzel elválasztva. Kezdetben minden lámpa zöld jelzést mutat.
A kimenetben egyetlen szám szerepeljen: a teljes táv megtételéhez minimálisan szükséges idő egészrész-törtrész alakban (ab/c), ahol c a célba érkezés sebessége.

 
 

A maximális pontszám eléréséhez a programnak a legnagyobb tesztesetekre is néhány percen belül le kell futnia (egy korszerű PC-n). A feladat 64kB memóriában is megoldható, ezért az időkorlát az ilyen környezetekben készült megoldásokra is vonatkozik, így (átmeneti) segédfájlok használatát ott sem javasoljuk.
Beküldendő a program forráskódja (s44.pas, s44.cpp, ...), valamint a program rövid dokumentációja (s44.txt, s44.pdf, ...). A dokumentáció tartalmazza a megoldás rövid leírását, és megadja, hogy a forrásállomány melyik fejlesztőkörnyezetben fordítható és hogyan paraméterezhető.