Il problema

Transcript

Il problema
IOI 2000
xor
XOR
Il problema
State scrivendo un’applicazione per telefoni cellulari che hanno uno schermo in
bianco e nero. Le coordinate x dello schermo partono da sinistra e le y dall’alto,
come si vede in figura. Per fare funzionare l’applicazione c’è bisogno di varie
immagini, che non sono tutte della stessa dimensione. Invece di memorizzarle, volete ricrearle utilizzando la libreria grafica del telefono. Potete assumere
che all’inizio della creazione di un’immagine tutti i pixel siano bianchi. L’unica
operazione grafica nella libreria del telefono è XOR(L,R,T,B), che inverte i valori dei pixel nel rettangolo con coordinata superiore sinistra (L,T) e coordinata
inferiore destra (R,B).
Per esempio, considerate l’immagine in figura 3. Applicando uno XOR(2,4,2,6)
a un’immagine interamente bianca si ottiene l’immagine in figura 1. Applicando
uno XOR(3,6,4,7) all’immagine in figura 1 si ottiene l’immagine in figura 2, e
applicando uno XOR(1,3,3,5) all’immagine in figura 2 si ottiene l’immagine
in figura 3.
Figura 1
Figura 2
Figura 3
Dato un insieme di figure in bianco e nero, dovete generare ogni figura a partire
da uno schermo interamente bianco usando il numero più piccolo possibile di
XOR. Vi vengono dati file di input contenenti le immagini, e dovete sottoporre file
contenenti i parametri per le chiamate a XOR, non un programma che li crea.
Pagina 1/3
xor
IOI 2000
xor
Dati in input
Vi vengono fornite 10 istanze del problema nei file con nomi da xor1.in a
xor10.in. Ogni file è organizzato come segue: la prima riga del file contiene
un intero N , 5 ≤ N ≤ 2000, che è il numero di righe e colonne dell’immagine.
Le righe rimanenti rappresentano righe dell’immagine dall’alto in basso. Ogni
riga contiene N interi: i valori dei pixel nella riga da sinistra a destra. Ognuno di
questi interi è 0 o 1, dove 0 rappresenta un pixel bianco e 1 rappresenta un pixel
nero.
Dati in output
Dovete sottoporre 10 file di output corrispondenti ai file di input dati. Ricordatevi
che la dimensione di un file di output deve essere inferiore a 1 megabyte.
La prima riga deve contenere il testo
#FILE xor I
dove l’intero I è il numero del corrispondente file di input. La seconda riga contiene un intero K : il numero di chiamate XOR specificate nel file. Le seguenti K
righe specificano le chiamate, dalla prima all’ultima. Ogni riga contiene quattro
interi: i parametri L, R, T, B, in quest’ordine.
Esempio di input e output
xor0.in
7
0 0 0 0
0 1 1 1
1 0 0 1
1 0 1 0
1 0 1 0
0 1 0 0
0 0 1 1
Pagina 2/3
0
0
0
1
1
1
1
0
0
0
1
1
1
1
0
0
0
0
0
0
0
xor0.out
#FILE xor 0
3
2 4 2 6
3 6 4 7
1 3 3 5
xor
IOI 2000
xor
Punteggio
Se
• le chiamate a XOR specificate nel vostro file non generano l’immagine richiesta, o
• il numero di chiamate a XOR specificate nel vostro file di output non è K , o
• nel vostro file di output K > 40000, o
• il vostro file di output contiene una chiamata a XOR con L > R o T > B, o
• il vostro file di output contiene una chiamata a XOR che non ha coordinate
positive, o
• il vostro file di output contiene una chiamata a XOR con una coordinata il
cui valore è maggiore di N ,
il vostro punteggio è zero. Altrimenti, il vostro punteggio è
1 + 9 × ChiamateNellaMiglioreSoluzione/ChiamateNellaVostraSoluzione.
Il punteggio è arrotondato alla prima cifra decimale per ogni file di input. Il
punteggio totale è arrotondato all’intero più vicino.
Supponiamo che voi sottoponiate una soluzione con 121 chiamate a XOR. Se quella è la migliore soluzione, allora il vostro punteggio è 10. Se invece la soluzione migliore sottoposta usa 98 chiamate a XOR, allora il vostro punteggio diventa
1 + 9 × 98/121 = 8.289 . . . , che verrà arrotondato a 8.3.
Pagina 3/3
xor