Serverite kolimine

시간 제한3초메모리 제한1024 MB

요약
세 개의 스택 사이에서 서버를 한 번에 하나씩 옮겨, 무거운 서버를 가벼운 서버 위에 놓지 않으면서 X 서버는 B에, Y 서버는 C에 최소 이동으로 모은다.
난이도

어려움10점 중 8점

유형
재귀, 분할 정복, 그리디
정답자
아직 제출이 없습니다

문제

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 NN (1≤N≤201 \le N \le 20) ja tootja X serverite arv KK (0≤K≤N0 \le K \le N). Teisel real on KK arvu, mis on tootja X serverite numbrid kasvavas järjekorras. Serverid on nummerdatud 1…N1 \ldots N 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.

예제1

  1. 예제 1

    입력
    3 2
    1 3
    
    예상 출력
    A->B
    A->C
    B->C
    A->B
    C->B