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