# Olimpiadi internazionali dell'informatica

Le Olimpiadi internazionali dell'informatica, in inglese International Olympiad in Informatics e in acronimo IOI, sono competizioni fra studenti delle scuole secondarie che si svolgono annualmente.
L’idea di istituire un’Olimpiade internazionale dell'informatica fu proposta dal professore bulgaro Blagovest Sendov durante la 24° conferenza generale dell’UNESCO svoltasi a Parigi nell’ottobre 1987. Nel maggio 1989, l'UNESCO ha avviato e sponsorizzato la prima Olimpiade internazionale dell'informatica (IOI). Il primo IOI si è tenuto a Pravec in Bulgaria nel 1989.
La competizione consiste di due giorni di programmazione per la soluzione di problemi di natura algoritmica. Gli studenti competono su base individuale e da ogni nazione partecipante provengono fino a quattro studenti (ad eccezione della nazione ospitante che può far concorrere 8 studenti); nel 2004 hanno partecipato 81 nazioni. Gli studenti sono selezionati attraverso analoghe competizioni nazionali. Ad esempio in Gran Bretagna gli studenti che fanno parte della squadra nazionale sono scelti nella British Informatics Olympiad (BIO), mentre in Italia è l'AICA ad occuparsene.
Nel 2012 le Olimpiadi internazionali dell'informatica si sono tenute per la prima volta in Italia, a Sirmione.

## La selezione italiana

Ogni nazione adotta il criterio di selezione che preferisce. In Italia le selezioni vengono suddivise in scolastiche, territoriali e nazionali.

### Selezione scolastica

La prova viene somministrata nell'istituto di provenienza di ogni studente. La prova consiste nella soluzione di problemi a carattere logico-matematico, algoritmico e di programmazione in pseudocodice (la cui descrizione per la gara è disponibile qui). Tutti i quesiti sono pensati per non richiedere la conoscenza di alcun linguaggio di programmazione.
I problemi sono di due tipologie: a risposta aperta, per cui è richiesta una soluzione alfanumerica; oppure a risposta chiusa, per cui lo studente deve scegliere una tra cinque risposte proposte. A ogni risposta esatta vengono assegnati 5 punti; a ogni risposta sbagliata 0 punti; mentre ad una risposta vuota viene assegnato 1 punto se la domanda è a risposta chiusa e 0 punti se la domanda è a risposta aperta.
Nella selezione scolastica 2010-2011 si sono iscritti 441 istituti per un totale di circa 10.000 studenti; nel 2015-2016 si è passati a 14.000
Alla selezione successiva passano sempre il primo studente di ogni istituto, il secondo se ha superato la media nazionale, e altri studenti a discrezione del comitato organizzativo; oltre ai partecipanti alla selezione nazionale dell'anno precedente, gli studenti (riserve escluse) della miglior squadra di ciascuna regione italiana che abbia partecipato alla finale delle Olimpiadi di Informatica a Squadre, e altri studenti che si siano distinti in altre competizioni a carattere scientifico a livello nazionale, sempre a insindacabile giudizio del Comitato Olimpico.

### Selezione territoriale

Gli studenti ammessi parteciperanno alla selezione territoriale (in passato regionale) che si svolgerà in una sede prefissata. Ogni sede ha in media 30 partecipanti e ogni regione ha un numero di sedi variabile, da 1 a 6.
La gara, svolta su piattaforma online e della durata di 3 ore, consiste nella soluzione di 4 problemi da risolvere mediante la scrittura di programmi. Questi sono simili a quelli proposti alle Olimpiadi Internazionali di Informatica, anche se mediamente più semplici. Ogni problema vale 50 punti e vengono presentati in un ordine indicativo crescente del livello di difficoltà e conoscenze richieste dal problema.
Il punteggio assegnato ad una sottoposizione è proporzionale al numero di casi correttamente risolti q rispetto al totale dei casi presenti T (punteggio = 50*q/T). Il punteggio assegnato ad un problema è il massimo dei punteggi ottenuti tra tutte le sottoposizioni effettuate. Lo stile di programmazione non ha alcun effetto sulla valutazione, così come il tempo usato per risolvere un input, purché l’esecuzione del programma sia abbastanza rapida da consentire la consegna dell’output entro il termine della gara.
I problemi devono essere risolti tramite programmi scritti in uno dei linguaggi di programmazione consentiti. I linguaggi ufficialmente supportati (edizione 2022-23) sono: C, C#, C++, Java, JavaScript (con template in HTML), Pseudocodice e Python 3. Per questi linguaggi saranno disponibili dei template di soluzione con il codice relativo alla lettura dell’input e alla scrittura dell’output. Sono inoltre consentiti i seguenti linguaggi senza supporto del template: Go, Pascal, TypeScript e Visual Basic.
Parallelamente alla gara gli studenti sono invitati a completare il percorso di allenamento AlgoBadge, che introduce agli argomenti utili per le gare territoriali e, soprattutto, nazionali. Non è necessario completarlo, ma è obbligatorio raggiungere il badge d’argento entro una data stabilita dal Comitato Olimpico (in generale i primi di luglio) per essere considerati ammissibili alla selezione nazionale.
Sono ammessi alla selezione nazionale:
* Il primo classificato di ogni Sede Territoriale (le sedi distaccate contano con la sede principale);
* Gli studenti invitati ad almeno un corso di formazione OII svolto nell’anno in corso che rispettano i requisiti per partecipare alle IOI, anche se non hanno effettuato la gara territoriale;
* Altri studenti ammessi per fast-track, cioè i migliori studenti del biennio fino al raggiungimento di 20 ammessi in totale, e le migliori studentesse fino al raggiungimento di 10 ammesse in totale (nel totale contano anche altri ammessi per i punti 1, 2 e 3);
* I migliori della classifica generale non già ammessi per i punti precedenti, fino ad esaurimento posti.

### Selezione nazionale

Gli studenti ammessi (circa 100) partecipano alla competizione nazionale tutti insieme, in una determinata sede scelta annualmente. La prova consiste sempre in 4 problemi, ma il tempo concesso è di 5 ore.
I problemi devono essere risolti tramite programmi scritti in linguaggio C++ in quanto la gara si svolge esclusivamente in ambiente GNU/Linux con compilatore C++. Lo standard di riferimento è C++17 o successivo.
A differenza delle precedenti selezioni, i risultati vengono comunicati direttamente ai partecipanti il giorno dopo la gara.
I primi classificati saranno premiati con:
* un dodicesimo dei partecipanti riceve una medaglia d'oro;
* un sesto dei partecipanti riceve una medaglia d'argento;
* un quarto dei partecipanti riceve una medaglia di bronzo.
I vincitori delle medaglie d’oro, insieme ad alcuni vincitori di medaglie d’argento e di bronzo, a insindacabile giudizio del Comitato, sono dichiarati Probabili Olimpici (PO) e sono ammessi alla successiva fase di allenamento, a patto di raggiungere il badge di diamante su AlgoBadge qualche giorno prima della data dell’allenamento.

### Probabili Olimpici

I probabili olimpici partecipano ad un percorso di formazione in presenza che dura fino al giugno precedente alla gara internazionale, quando vengono decisi 4 olimpionici e 2 riserve. Gli "stage" di formazione sono selettivi e portano a diminuire un po' alla volta il numero di probabili olimpici che continuano il percorso di allenamento.

## Struttura della competizione internazionale

In ciascuno dei due giorni di competizione, agli studenti vengono solitamente assegnati tre problemi che devono risolvere in cinque ore. Ogni studente lavora da solo, al computer, senza poter contare su alcun aiuto: è proibito comunicare con gli altri partecipanti, utilizzare libri ecc. Generalmente, per risolvere il problema il concorrente deve scrivere un programma in C, C++ o Pascal e consegnarlo prima che il termine di cinque ore scada. Successivamente, il programma viene valutato mandandolo in esecuzione con dei dati di prova, segreti, per un totale di 10 o 20 prove con dati diversi. Al concorrente vengono assegnati punti per ciascun caso di prova che il suo programma risolve correttamente, entro i limiti di memoria e di tempo assegnati. In alcuni casi, il programma del concorrente deve interagire con una libreria esterna, questo per consentire problemi nei quali l'input non è fissato ma dipende dalle azioni del programma – per esempio nei problemi nei quali il programma deve "giocare". Un altro, nuovo tipo di problemi prevede che gli input siano disponibili pubblicamente durante le cinque ore della competizione. Il partecipante in questo caso non deve consegnare un programma, ma l'output relativo all'input assegnato: sta a lui decidere se ottenere i file di output scrivendo un programma (sfruttando speciali caratteristiche dell'input), a mano, oppure mediante una combinazione di questi metodi.
Il punteggio dei due giorni di competizione e tutti i problemi sono sommati per ciascun concorrente. Alla cerimonia di premiazione, i concorrenti sono premiati con delle medaglie a seconda del loro punteggio totale. Generalmente, la metà migliore dei concorrenti (due per paese, in media) è premiato con una medaglia, in modo che il rapporto fra oro : argento : bronzo : nessuna medaglia sia approssimativamente 1:2:3:6 (così circa 1/12 dei concorrenti ottiene una medaglia d'oro).

### Italia

L'Italia ha vinto in 24 edizioni (dal 2000 al 2023) 66 medaglie:
* 2 medaglie d'oro
* 24 medaglie d'argento
* 40 medaglie di bronzo

## Lista dei siti Web e delle sedi delle Olimpiadi

* IOI 2027 si terranno a Potsdam, Germania, 2027 https://ioi2027.de/
* IOI 2026 si terranno in Uzbekistan, 2026
* IOI 2025 si terranno a Sucre, Bolivia, 2025
* IOI 2024 si sono tenute ad Alessandria, Egitto, 2024 Archiviato il 30 marzo 2023 in Internet Archive.
* IOI 2023 si sono tenute a Szeged, Ungheria, 2023
* IOI 2022 si sono tenute a Yogyakarta, Indonesia, 2022
* IOI 2021 si sono tenute a Singapore (online), 2021
* IOI 2020 si sono tenute a Singapore (online), 2020
* IOI 2019 si sono tenute a Baku, Azerbaigian, 2019 Archiviato il 1º aprile 2022 in Internet Archive.
* IOI 2018 si sono tenute a Tsukuba, Giappone, 2018
* IOI 2017 si sono tenute a Tehran, Iran, 2017
* IOI 2016 si sono tenute a Kazan', Russia, 2016
* IOI 2015 si sono tenute ad Almaty, Kazakistan, 26 luglio - 2 agosto, 2015
* IOI 2014 si sono tenute a Taipei, Taiwan, 13 - 20 luglio, 2014
* IOI 2013 si sono tenute a Brisbane, Australia, 6 - 13 luglio, 2013
* IOI 2012 si sono tenute a Sirmione e Montichiari, Italia, 23 - 30 settembre, 2012 Archiviato il 14 ottobre 2012 in Internet Archive.
* IOI 2011 si sono tenute a Pattaya, Thailandia, 22 - 29 luglio, 2011
* IOI 2010 si sono tenute a Waterloo, Canada, 8 - 21 agosto, 2010
* IOI 2009 si sono tenute a Plovdiv, Bulgaria, 8 - 15 agosto, 2009
* IOI 2008 si sono tenute a Il Cairo, Egitto, 16 - 23 agosto, 2008
* IOI 2007 si sono tenute a Zagabria, Croazia, 15 - 22 agosto, 2007
* IOI 2006 si sono tenute a Mérida, Yucatán, Messico, 13 - 20 agosto, 2006
* IOI 2005 si sono tenute a Nowy Sącz, Polonia, 18 - 25 agosto, 2005
* IOI 2004 si sono tenute ad Atene, Grecia, 11 - 18 settembre, 2004
* IOI 2003 si sono tenute a Kenosha, Wisconsin, USA, 16 - 23 agosto, 2003
* IOI 2002 si sono tenute a Yongin, Corea del Sud, 18 - 25 agosto, 2002
* IOI 2001 si sono tenute a Tampere, Finlandia, 14 - 21 luglio, 2001
* IOI 2000 si sono tenute a Pechino, Cina, 23 - 30 settembre, 2000
* IOI 1999 si sono tenute ad Antalya, Turchia, 9 - 16 ottobre, 1999
* IOI 1998 si sono tenute a Setúbal, Portogallo, 5 - 12 settembre, 1998
* IOI 1997 si sono tenute a Città del Capo, Sudafrica, 30 novembre - 7 dicembre, 1997
* IOI 1996 si sono tenute a Veszprém, Ungheria, 25 luglio - 2 agosto, 1996
* IOI 1995 si sono tenute ad Eindhoven, Paesi Bassi, 26 giugno - 3 luglio, 1995
* IOI 1994 si sono tenute a Haninge, Svezia, 3 - 10 luglio, 1994
* IOI 1993 si sono tenute a Mendoza, Argentina, 16 - 25 ottobre, 1993
* IOI 1992 si sono tenute a Bonn, Germania, 11 - 21 luglio, 1992
* IOI 1991 si sono tenute ad Atene, Grecia, 19 - 25 maggio, 1991
* IOI 1990 si sono tenute a Minsk, Bielorussia, URSS, 15 - 21 luglio, 1990
* IOI 1989 si sono tenute a Pravec, Bulgaria, 16 - 19 maggio, 1989