Robotdammsugaren 2
Problemet Robotdammsugaren gick ut på att räkna hur många rutor en robotdammsugare besöker i ett rutnät. I det här problemet får du givet rutnätet och längden på kommandosekvensen och ska istället hitta en kommandosekvens som gör att dammsugaren besöker så många olika rutor som möjligt.
Du kommer att få poäng beroende på hur bra din lösning är jämfört med domarlösningen. Detta innebär att det kan vara svårt att få $100$ poäng, men det behöver inte vara så svårt att plocka delpoäng.
Indata
Indatan består av $10$ testfall.
-
Den första raden innehåller ett heltal $T$ ($0 \leq T \leq 10$), numret på testfallet ($0$ är exempelfallet nedan).
-
Den andra raden innehåller tre heltal: $R$ ($3 \le R \le 2000$) och $C$ ($3 \le C \le 2000$), antalet rader och kolumner i den rutnätsformade lagerlokalen, samt $N$ ($1 \le N \le 2000$), längden på kommandosekvensen.
-
De följande $R$ raderna utgör en beskrivning av hur den rutnätsformade lagerlokalen ser ut. Den $i$:te av dessa rader innehåller $C$ tecken som beskriver hur den $i$:te raden ser ut. Varje tecken är antingen en punkt "." om en ruta är tom, en fyrkant "#" om rutan innehåller en låda eller "O" om rutan är robotens startposition. Det är garanterat att exakt en ruta innehåller "O". Dessutom är det garanterat att alla rutor längst kanten av rutnätet är "#".
Utdata
Skriv ut en rad med en sträng av längd $N$ som består av tecknen "^", ">","v","<". Detta är kommandoraden som dammsugaren kommer följa.
Poängsättning
Ditt program kommer att testas på $10$ testfall, och poängsättas baserat på hur det står sig relativt domarnas lösning. Om din inskickning på ett givet testfall besöker $X$ rutor, och poängen domarna uppnått på det testfallet är $Y$, så blir din poäng på det testfallet $10 \cdot (X / Y)$, avrundat till två decimaler.
Din poäng för en inskickning är summan av poängen för testfallen, och din totala poäng är poängen för den bästa inskickningen. Det går alltså inte att kombinera testfall mellan olika inskickningar, utan du måste skicka in ett enda program som maximerar din poäng på alla testfall samtidigt.
Din lösning kan maximalt få $100$ poäng, även om den är bättre än den domarna skrivit.
Exempeltestfallet kommer alltid att ge $0$ poäng.
Förklaring av exampelfall
Exempelfallet är exempel $4$ från Robotdammsugaren. Lösningen som står här får $33$ poäng, precis som i svaret till exempel $4$.
Testfall
Här är beskrivningar av de $10$ testfallen som förekommer. Talet $B$ är antalet blockerade rutor som inte är på kanten. Rutnät av typ 1 har slumpmässigt blockerade rutor, och startrutan är också slumpmässigt utplacerad. Rutnät av typ 2 har också slumpmässigt utplacerade blockerade rutor, men bara på övre halvan av rutnätet. I rutnät av typ 2 är startrutan slumpmässigt placerad på en av rutorna högst upp i rutnätet.
Testfall |
Gränser |
Typ av rutnät |
$1$ |
$R = 10$, $C = 10$, $N = 10, B = 10$ |
1 |
$2$ |
$R = 100$, $C = 100$, $N = 250, B = 500$ |
1 |
$3$ |
$R = 100$, $C = 100$, $N = 250, B = 2000$ |
1 |
$4$ |
$R = 100$, $C = 100$, $N = 2000, B = 2000$ |
1 |
$5$ |
$R = 500$, $C = 500$, $N = 500, B = 10000$ |
1 |
$6$ |
$R = 500$, $C = 500$, $N = 500, B = 50000$ |
1 |
$7$ |
$R = 500$, $C = 500$, $N = 500, B = 10000$ |
2 |
$8$ |
$R = 2000$, $C = 2000$, $N = 2000, B = 10^5$ |
1 |
$9$ |
$R = 2000$, $C = 2000$, $N = 2000, B = 8 \cdot 10^5$ |
1 |
$10$ |
$R = 2000$, $C = 2000$, $N = 2000, B = 3 \cdot 10^5$ |
2 |
Med slumpmässig menas här likformigt slumpmässig.
Sample Input 1 | Sample Output 1 |
---|---|
0 8 10 14 ########## #.#......# #....#...# ##......O# #........# #..#.....# #....#...# ########## |
<v>^<v>v<^^><> |