Rätblocket
문제
Rätblocket är ett mobilspel som snabbt har blivit otroligt populärt. Spelet går ut på att man genom att vinkla mobilen åt olika håll ska få ett rätblock att rulla från cell till cell på en bana. Rätblocket har storlek xx och banan är ett tvådimensionellt bräde med celler av storlek x. Vissa celler är fria, vilket betyder att rätblocket kan röra sig fritt på dem, medan vissa celler är blockerade. Det är inte möjligt att röra sig utanför banan.
Beroende på om rätblocket står upp eller ligger ner så ockuperar det eller celler. I början av spelet så står blocket upp i cellen markerad med ett och målet är att flytta det så att det står i cellen markerat med ett (det räcker alltså inte med att halva blocket ligger på cell ). En förflyttning av blocket kan göras i olika riktningar - upp, ner, höger eller vänster - och en förflyttning gör att blocket rullar över i den givna riktningen (givet att det inte är en blockerad cell i vägen eller banan tar slut). För att tydligare visa hur en förflyttning går till så är här början på en lösning till exempelfall :
[이미지 1] [이미지 2] [이미지 3] [이미지 4] [이미지 5]
Figur 4. Halva lösningen till det första exempelfallet. Rätblocket flyttas först ett steg till höger, sedan två steg nedåt och till sist ett steg åt vänster.
På mer avancerade banor så förekommer även så kallade modulo-celler. Dessa är celler som kan befinna sig i två olika tillstånd, eller . I tillstånd så beter sig en modulo-cell precis som en fri cell som rätblocket kan röra sig på. I tillstånd så är dock modulo-celler upphöjda och beter sig som blockerade celler. Det kan även finnas växel-celler (markerade med ett ) utplacerade på banan. När rätblocket ställs på en växel-cell så ändras tillstånden på alla modulo-celler ( blir till och vice versa).
[이미지 6] [이미지 7]
Figur 5. Det tredje exempelfallet, före och efter att växeln har aktiverats.
Banorna är designade så att det alltid finns en giltig lösning. Din uppgift är att beräkna det minsta antal förflyttningar som behövs för att lösa en bana.
입력
Du kommer först att få två heltal och . Detta betyder att banan har rader och kolumner. De följande raderna har tecken var och beskriver hur banan ser ut. Följande tecken kan förekomma:
- eller : beskriver banans start- respektive slut-positioner.
- . (en punkt): beskriver en fri cell.
- #: beskriver en blockerad cell.
- eller : beskriver en modulo-cell med givet start-tillstånd.
- c: beskriver en växel-cell
Det är garanterat att varje bana innehåller precis ett och ett .
출력
Skriv ut en rad med ett heltal, det minsta antal förflyttningar som behövs för att flytta rätblocket från cell till cell .
예제
예제 1
3 3 A.. ... ..B
8
예제 2
3 5 A#... ..... ...#B
14
예제 3
3 7 A..#... .B.1... ..c#...
27