Skyscrapers P47245


Statement
 

pdf   zip

0.75 Skyscrapers és un solitari de la família del Sudoku. Considereu un tauler TT de mida n×nn \times n, on totes les files i columnes contenen una permutació de {1,,n}\{ 1, \dots, n \}. A la dreta en veiem un exemple amb n=4n=4. El tauler representa un mapa amb un edifici a cada casella, i TijT_{ij} és l’alçària (en la tercera dimensió) de l’edifici situat a la posició (i,j)(i, j). Si ens posem al nord d’una columna jj del tauler, i mirem cap al sud, veurem tots els edificis de la columna jj que no estiguin tapats per algun edifici més proper a nosaltres que sigui més alt. Similarment, si ens posem al sud i mirem la columna cap al nord, si ens posem a l’oest i mirem la fila cap a l’est, i si ens posem a l’est i mirem la fila cap a l’oest.

0.25

(8,8)

(2,2)(2,6) (3,2)(3,6) (4,2)(4,6) (5,2)(5,6) (6,2)(6,6) (2,2)(6,2) (2,3)(6,3) (2,4)(6,4) (2,5)(6,5) (2,6)(6,6)

(2.5,5.5)4 (3.5,5.5)3 (4.5,5.5)2 (5.5,5.5)1 (2.5,4.5)2 (3.5,4.5)1 (4.5,4.5)4 (5.5,4.5)3 (2.5,3.5)1 (3.5,3.5)4 (4.5,3.5)3 (5.5,3.5)2 (2.5,2.5)3 (3.5,2.5)2 (4.5,2.5)1 (5.5,2.5)4

(2.5,6.5)1 (3.5,6.5)2 (4.5,6.5)2 (5.5,6.5)3

(2.5,1.5)2 (3.5,1.5)2 (4.5,1.5)3 (5.5,1.5)1

(1.5,5.5)1 (1.5,4.5)2 (1.5,3.5)2 (1.5,2.5)2

(6.5,5.5)4 (6.5,4.5)2 (6.5,3.5)3 (6.5,2.5)1

(2.5,6.5)0.4

(6.5,5.5)0.4

(1.5,4.5)0.4

Per exemple, l’1 marcat en vermell indica que, si mirem al sud des d’aquella posició, només veiem l’edifici més alt, d’alçària 4, el qual tapa la resta d’edificis. El 4 marcat en verd indica que, si mirem a l’oest, veiem tots els edificis. El 2 marcat en blau cel indica que, si mirem a l’est, veiem exactament dos edificis, d’alçàries 2 i 4.

La vostra tasca és reconstruir el tauler a partir dels comptadors d’edificis visibles des de les 4n4n posicions al voltant del tauler.

Entrada

L’entrada consisteix en diversos casos, cadascun amb una nn entre 1 i 6, seguida de quatre seqüències amb nn comptadors entre 1 i nn, corresponents al nord, sud, oest i est en aquest ordre (d’esquerra a dreta o de dalt a baix). El primer exemple d’entrada es correspon a la figura anterior. Cada cas té almenys un tauler consistent amb els comptadors donats.

Sortida

Per a cada cas, escriviu tots els taulers consistents amb els comptadors, en ordre lexicogràfic. Per ordenar-los, suposeu que els recorreu per files de dalt a baix, i cada fila d’esquerra a dreta. Al tercer exemple d’entrada, “3512421453542311354242315” ha d’anar abans que “3521424153524311354241325”. Escriviu una línia amb 20 guions després de cada tauler.

Observació

La solució esperada és un backtracking que es pot optimitzar de moltes maneres. En funció de com d’eficient sigui el codi que envieu, el jutge us donarà una aproximació a la vostra nota màxima (60, 80 o 100 punts sobre 100). Per exemple, una solució intermèdia comprova els comptadors de cada fila completada abans de passar a omplir la següent.

Information
Author
Salvador Roura
Language
Catalan
Official solutions
C++
User solutions
C++