InfoCNFB 2024 Mirror - Juniori | Rotate

This was the problem page during the contest. Access the current page here.
Time limit: 0.2s Memory limit: 64MB Input: rotate.in Output: rotate.out

Cerință

Avem o matrice patratică de dimensiune nn.

Toate elementele egal depărtate de marginea matricei spunem că sunt pe același pătrat concentric. De exemplu, elementele de pe contur (linia 11, coloana 11, linia nn, coloana nn), sunt pe primul pătrat concentric. Elementele de linia 22, coloana 22, linia n1n-1, coloana n1n-1, sunt pe al doilea pătrat concentric etc. Matricele din figura următoare au 44 pătrate concentrice.

Se cunoaște că fiecare patrat concentric are elemente numere naturale, distincte, consecutive, incepand cu 11.

Fiecare astfel de pătrat poate fi rotit la stânga sau la dreapta. Rotirea are un cost dat de distanța pe care se deplasează elementele (de exemplu o rotire cu două poziții are costul 22 fie că se face către stânga sau către dreapta).

Dorim să ducem toate elementele cu valoarea 11 pe aceeași jumătate de diagonală (ca în unul dintre cele patru exemple de matrice de mai jos). Dorim, de asemenea, să realizăm acest lucru minimizând valoarea C=C = suma costurilor rotirilor tuturor pătratelor concentrice.

Date de intrare

Fișierul rotate.in conține pe prima linie valoarea nn. Pe fiecare din următoarele nn linii sunt câte nn numere naturale, separate prin spațiu, reprezentând matricea dată.

Date de ieșire

Fișierul rotate.out conține pe prima linie valoarea CC. Pe fiecare din următoarele nn linii sunt câte nn numere naturale, separate prin spațiu, reprezentând configurația matricei finale pentru a obține costul CC. Dacă sunt mai multe variante de a obține costul CC, se va afișa matricea care va avea ca jumătate de diagonală completată pe cea cu codul minim (în figură, sunt marcate în chenar roșu codurile jumătăților de diagonală, de la 11 la 44).

Restricții și precizări

  • 1n1 0001 \leq n \leq 1 \ 000;
  • Elementele de de pe același pătrat concentric formează o permutare.

Exemplu

rotate.in

4
8 1 6 2
9 3 4 7
5 1 2 3
4 10 11 12

rotate.out

2
1 6 2 7
8 1 3 3
9 2 4 12
5 4 10 11

Explicație

Rotind cu o poziție la stânga atât pătratul 11 și o poziție la dreapta pătratul 22, obținem costul C=2C = 2 și matricea prezentată în rotate.out.

Log in or sign up to be able to send submissions!