International Olympiad in Informatics 2013

Documenti analoghi
International Olympiad in Informatics 2013

International Olympiad in Informatics 2013

Lo stile 1 corrisponde all'arte moderna neoplastica. Per esempio: Lo stile 2 corrisponde a paesaggi impressionistici. Per esempio:

Capitolo 10 - Strutture

PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VI.2015

Se sceglierai di utilizzare il template, dovrai implementare la seguente funzione:

Quicksort e qsort() Alessio Orlandi. 28 marzo 2010

Nella propria home directory creare una sottodirectory chiamata es08, in cui metteremo tutti i file C di oggi.

Crittografia riflessa (crittografia)

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

Taglialegna (taglialegna)

Esercitazioni di FONDAMENTI DI INFORMATICA MODULO B

Verifiche (verifiche)

Calcolare x n = x x x (n volte)

Stringhe in C. Luca Abeni. Informatica Luca Abeni 1 / 10

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO IX.2017

Esercizio 1. Tavola ordinata in memoria centrale

C funzioni à scope di variabili

Stringhe in C. Nicu Sebe. Informatica Nicu Sebe 1 / 14

La copia di un file. contare di quanti caratteri sia composto il file (e quindi determinare la dimensione del file di origine)

Parco avventura (carrucole)

Algoritmi e Strutture di Dati A.A Esempio di prova scritta del 19 gennaio 2018 D.M CFU Libri e appunti chiusi Tempo = 2:00h

Programmazione C: Esercizi su vettori e funzioni. Titolo presentazione. sottotitolo. Milano, XX mese 20XX

Esercizi Programmazione I

Pazza gioia (caduta) Olimpiadi Italiane di Informatica Chiarimenti. Trento, settembre caduta IT

int main(){ int numero; /* numero di cui voglio calcolare il fattoriale */ int fatt; /* memorizzo il fattoriale di numero */ int somma=0;

Algoritmi di ordinamento: Array e ricorsione

Linguaggio C: PUNTATORI

Giochi di parole. D Conta vocali

Esercitazioni di Fondamenti di Informatica - Lez. 8 27/11/2018

Informatica per Statistica Riassunto della lezioni del 14/11/2012 e 16/11/2012

ABC Testi dei problemi

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 12. A. Miola Dicembre 2006

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VII.2015

Sistemi operativi A, Unix+C, 26/09/2017. Nome: Cognome: Matricola:

Esercitazioni di Fondamenti di Informatica - Lez. 7 20/11/2018

Interfacce. Esempio: interfaccia I con una sola funzione g() public interface I {

I/O da tastiera + Alessandra Giordani Lunedì 2 maggio

Esercizi su array di array

Esercitazione 11. Liste semplici

Esercizi Programmazione I

Stringhe. In C le stringhe ben formate sono in realtà array di caratteri terminati sempre da un carattere speciale, \0, detto anche

INFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 4 Dott. Michele Zanella Ing. Gian Enrico Conti

Esercitazioni di FONDAMENTI DI INFORMATICA MODULO B

Formati e compressioni

Programmazione II Compitino (Vers. A)

- proporvi due semplici algoritmi per l'ordinamento di un vettore

Le strutture /1. struct temp {char titolo[200]; char autore[100]; int pagine; } ; typedef struct temp libro;

Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati

Classi ed Oggetti. Fondamenti di Informatica A-K

Costruiamo un'immagine o qualcosa di simile.

Funzioni in C. Funzioni. Strategie di programmazione. Funzioni in C. Come riusare il codice? (2/3) Come riusare il codice? (1/3)

Il linguaggio C Strutture

Strategie di programmazione

Laboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014

Aritmetica dei puntatori

STRUMENTI SELEZIONE A MANO LIBERA e FORBICI INTELLIGENTI

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura:


Laboratorio di Informatica I

Gli array. impone al programma, in fase di esecuzione, di riservare dello spazio in memoria per 10 variabili di tipo int

Puntatori e array. Violetta Lonati

PROVA SCRITTA 23 MARZO 2010

Circuiti e reti combinatorie. Appendice A (libro italiano) + dispense

Fondamenti di Informatica T-1

Passare argomenti al programma

Ingresso ed Uscita in C. Informatica 1 / 15

Lezione 6: Array e puntatori

UNIVERSITA DEGLI STUDI ROMA TRE DIPARTIMENTO DI MATEMATICA E FISICA

Lezione 6 Selection/Insertion Sort su interi e stringhe

Esercizio 1 (6 punti)

Laboratorio n 6 del Ing. Dario Cogliati

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO IX.2015

Un tipo di dato astratto (ADT) definisce una categoria concettuale con le sue proprietà: una definizione di tipo

Laboratorio di Informatica L-A 1

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VI.2017

Esercizi per il recupero del debito formativo:

Gestione dei file. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico

Fondamenti di Informatica e Laboratorio T-AB Prova Pratica - 16 Giugno 2009 Compito A

Il linguaggio C Strutture

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO II.2017

I puntatori /2. Ad esempio. // inizio codice. #include <stdio.h> void mostra(int); int main() {int a = 10; mostra(a); return 0;}

A. Ferrari. oggetti & game. Python. Alberto Ferrari Informatica

Prof. Massimiliano Giacomin 21 dicembre NOME: COGNOME: MATR: Scrivere nome, cognome e matricola chiaramente in caratteri maiuscoli

Dato un insieme S di n elementi totalmente ordinato, l'algoritmo di ordinamento detto HeapSort ha le seguenti caratteristiche:

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;

Definizione di classi. Walter Didimo

Linguaggio C. Vettori, Puntatori e Funzioni Stringhe. Università degli Studi di Brescia. Prof. Massimiliano Giacomin

Laboratorio di Algoritmi e Strutture Dati

Ricorsione. La ricorsione consiste nella possibilità di definire una funzione in termini di se stessa

CIRCUITI DIGITALI. La grandezza fisica utilizzata nella maggior parte dei circuiti digitali è la differenza di potenziale (tensione).

Esercitazione n 2. Obiettivi

Riepilogo della puntata precedente

ESERCIZIO 1 ESERCIZIO 1

Il linguaggio C. Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1

Transcript:

International Olympiad in Informatics 2013 6-13 July 2013 Brisbane, Australia Day 2 tasks cave Italian 1.0 Vagando perduto lungo il tragitto dal college all'uq Centre, ti sei imbattuto nell'ingresso di un sistema segreto di tunnel che si estende in profondità al di sotto dell'università. L'entrata è bloccata da un sistema di sicurezza consistente in N porte consecutive (ciascuna dietro alla precedente) ed N interruttori connessi ciascuno con una porta distinta. 0 1 2 3 0 1 2 3 Le porte sono numerate nell'ordine 0, 1,, (N - 1), dove la porta 0 è la più vicina all'ingresso del tunnel. Gli interruttori sono analogamente numerati 0, 1,, (N - 1), ma non sai quale interruttore sia connesso a quale porta. Gli interruttori sono tutti posti in un unico punto all'ingresso del tunnel. Ogni interruttore può essere in alto oppure in basso, ed esattamente una e una sola di queste due posizioni è corretta per ogni interruttore. Se un interruttore è nella posizione corretta la porta a lui connessa sarà aperta, altrimenti sarà chiusa. La posizione corretta varia per ogni interruttore, e non è noto quali siano le posizioni corrette. Vorresti trovare il modo di comprendere i dettagli del funzionamento di questo sistema di sicurezza. Per farlo, puoi impostare gli interruttori a una qualunque combinazione, e quindi camminare lungo il tunnel per verificare quale è la prima porta chiusa. Le porte non sono trasparenti, quindi non è possibile carpire informazioni sulle porte dietro di essa. Hai tempo di provare 70 000 differenti posizioni degli interruttori, ma non di più. Il tuo compito è di determinare la posizione corretta e a quale porta è connesso ogni interruttore.

Implementazione Devi sottoporre un file che implementi la procedura explorecave(). Questa procedura può richiamare la funzione del grader trycombination() fino a 70 000 volte, e deve terminare chiamando la procedura del grader answer(). Queste funzioni e procedure sono descritte nel seguito. Funzione del grader: trycombination() int trycombination(int S[]); function trycombination(var S: array of LongInt) : LongInt; Il grader conterrà questa funzione, che ti consente di provare una disposizione di interruttori e quindi entrare nel tunnel per determinare la prima porta chiusa. Se tutte le porte sono aperte, la funzione restituisce -1. Questa funzione è implementata in tempo O(N) ; cioè il tempo di esecuzione è proporzionale ad N nel caso peggiore. Può essere chiamata al massimo 70 000 volte. S : Un array di lunghezza N, che indica la posizione di ogni interruttore. L'elemento S[i] corrisponde all'interruttore i. Un valore di 0 indica che l'interruttore è in alto, mentre un valore di 1 indica che l'interruttore è in basso. Restituisce: Il numero della prima porta chiusa, o -1 se tutte le porte sono aperte. Procedura del grader: answer() void answer(int S[], int D[]); procedure answer(var S, D: array of LongInt); Questa procedura deve essere chiamata quando hai identificato la posizione degli interruttori che apre tutte le porte e la porta a cui ogni interruttore è connesso.

S : Un array di lunghezza N, riportante la posizione corretta per ogni interruttore. Il formato corrisponde a quello della funzione trycombination() descritta sopra. D : Un array di lunghezza N, riportante la porta a cui ogni interruttore è connesso. Precisamente, l'elemento D[i] deve corrispondere al numero della porta a cui l'interruttore i è connesso. Restituisce: Questa procedura non ha valore di ritorno, ma farà terminare il programma. Procedura: explorecave() void explorecave(int N); procedure explorecave(n: longint); La tua sottoposizione deve implementare questa procedura. Questa procedura deve usare la routine del grader trycombination() per determinare la posizione corretta di ogni interruttore e a quale porta ciascun interruttore è connesso, e quindi chiamare answer() appena ha determinato queste informazioni. N : Il numero di interruttori e porte nel tunnel.

Sessioni di esempio La seguente sessione di esempio fa riferimento al disegno presente all'inizio. Chiamata a funzione trycombination([1, 0, 1, 1]) trycombination([0, 1, 1, 0]) trycombination([1, 1, 1, 0]) answer([1, 1, 1, 0], [3, 1, 0, 2]) Valore di ritorno 1 3-1 (Il programma termina) Spiegazione Come nel disegno, gli interruttori 0, 2 e 3 sono in basso, mentre l'interruttore 1 è in alto. La funzione ritorna 1, dato che la porta 1 è la prima chiusa da sinistra. Le porte 0, 1 e 2 sono aperte, mentre la porta 3 è chiusa. Abbassare l'interruttore 0 fa aprire tutte le porte, come indicato dal valore di ritorno -1. Il programma risponde che le posizioni corrette sono quindi [1, 1, 1, 0], e gli interruttori 0, 1, 2 e 3 sono connessi alle porte 3, 1, 0 e 2 rispettivamente. Limiti Tempo limite: 2 secondi Limite di memoria: 32 MiB 1 N 5 000 Subtask Subtask Punteggio Limiti aggiuntivi 1 12 2 13 3 21 N 100 4 30 N 2 000 Per ogni i, l'interruttore i è connesso alla porta i. Il tuo compito è quindi quello di determinare la disposizione corretta degli interruttori. La disposizione corretta degli interruttori è sempre [0, 0, 0,, 0]. Il tuo compito è quindi quello di determinare a quale porta è connesso ciascun interruttore. 5 24 (Nessun limite aggiuntivo)

Testing Il grader di esempio legge l'input dal file cave.in, che deve essere nel seguente formato: linea 1: N linea 2: S[0] S[1] S[N - 1] linea 3: D[0] D[1] D[N - 1] Qui N è il numero di porte e interruttori, S[i] è la posizione corretta per l'interruttore i, e D[i] è la porta a cui l'interruttore i è connesso. L'esempio riportato sopra può essere fornito nel seguente formato: 4 1 1 1 0 3 1 0 2 Note relative al linguaggio Devi inserire #include "cave.h". Devi definire unit Cave, e devi anche importare le routine del grader tramite uses GraderHelpLib. Tutti gli array sono numerati a partire da 0 (e non 1 ). Vedi i template di soluzione nel tuo computer per alcuni esempi.