Serverite kolimine
시간 제한3초메모리 제한1024 MB
세 개의 스택 사이에서 서버를 한 번에 하나씩 옮겨, 무거운 서버를 가벼운 서버 위에 놓지 않으면서 X 서버는 B에, Y 서버는 C에 최소 이동으로 모은다.
문제
Tehnik saadetakse ühte väga kitsasse serveriruumi ülesandega tõsta kõik seadmepüstikus A olevad kahe eri tootja serverid ümber seadmepüstikutesse B ja C nii, et kõik tootja X serverid oleks lõpuks püstikus B ja tootja Y serverid püstikus C.
Kõnealused seadmepüstikud on sellise ehitusega, et servereid saab neisse paigutada ainult ülevalt ja igas pesas on selline toiteplokk, mis töötab ainult siis, kui selles asuva serveri energiatarve on väiksem kui vahetult selle all asuva serveri energiatarve. Püstiku põhjas olev toiteplokk suudab ära toita igasuguse nimetatud tootjate serveri.
Kuna tehnikul on lubatud seisata ainult üks server korraga, siis peab ta töötama selliselt, et seiskab serveri, mis asub mõne püstiku kõige ülemises hõivatud pesas, tõstab serveri mõne teise püstiku esimesesse vabasse pessa ja käivitab selle uuesti. Kõige selle juures peab ta jälgima, et ta kunagi ei asetaks suurema energiatarbega serverit väiksema energiatarbega serveri peale.
Kirjutada programm, mis leiab võimalikult väheste operatsioonidega plaani serverite kolimiseks.
입력
Faili esimesel real on püstikus A olevate serverite arv () ja tootja X serverite arv (). Teisel real on arvu, mis on tootja X serverite numbrid kasvavas järjekorras. Serverid on nummerdatud energiatarbe kasvamise järjekorras.
출력
Faili väljastada serverite liigutamiseks vajalikud operatsioonid, igaüks eraldi reale. Igale reale väljastada lähtepüstiku tähis, siis nool '->' ja lõpuks sihtpüstiku tähis.