• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Info Probabili soluzioni OII 2017 - territoriali

sant0

Utente Esperto
Autore del topic
1 Settembre 2014
1.345
124
Miglior risposta
0
Lo scorso martedì si sono svolte le Olimpiadi Italiane d'Informatica, o meglio, le selezioni territoriali.
Competizione aperta a tutti gli studenti delle superiori che frequentano l'anno 1, 2, 3 o 4.

Come ogni anno, i problemi da risolvere erano 3: uno generale, uno risolvibile con la programmazione dinamica e un grafo.

LSWF (d = 1)
Avendo un numero N, tradurlo in una sequenza di 1 e 0 tenendo come base i numeri della successione di Fibonacci. La somma degli 1 della sequenza, corrispondenti quindi al numero della successione di Fibonacci, devono risultare N. Ecco un esempio:
YTLqQPF.png

Come si arriva al risultato che 19 è 1000101 (i successivi 0 all'ultimo 1 sono irrilevanti)?
Ci sono svariati metodi: 1 + 2 + 3 + 13 o 1 + 2 + 3 + 5 + 8 o 1 + 5 + 13.
Ma qual è quello corretto? Be', io ho optato per l'ultimo per un motivo abbastanza semplice: andando per greedy, faccio meno confronti se dovessi avere un numero molto grande, esempio:
N = 10947
Tutti numeri della successione < N = 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946
Di conseguenza, se partiamo dal presupposto che fib[0], che ha come valore 1, è sempre preso, l'esecuzione si ferma al primo numero in ordine decrescente. Creiamo quindi una funzione che calcoli tutti i numeri sella successione di Fibonacci < N e poi iniziamo la ricerca:
xWesimn.gif

Il codice C++:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
INPUT:
19

OUTPUT:
100010


Scommesse (d = 2)
Ho in input un numero N e N-1 numeri nella riga successiva.
N è un numero compreso tra 1 e 10000 ed è dispari. La riga seguente sono delle carte con dei numeri casuali che non si ripetono da 0 a N-1. Ad ogni iterazione la coppia di carte che ha come somma un numero dispari, viene tolta. Vi si deve stampare quante e quali carte restano sul tavolo se si procede con una sequenza di mosse. Poniamo ad esempio N = 11 e la sequenza 1 0 2 6 4 5 3 9 8 10 7: possiamo vedere che a seconda da dove iniziamo ad esaminare le carte, ne escono due: 8 e 2.
Se iniziamo da 1:
3uEWYCa.gif


Se iniziamo da 9:
MTz5rur.gif


Il codice C++:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
INPUT:
11
1 0 2 6 4 5 3 9 8 10 7

OUTPUT:
2
8 2

Tecla (d = 2)
Non sono arrivato a risolvere questo problema, ma confrontandomi con gli altri partecipanti, pare essere un grafo di tipo BFS.

Se qualcuno ha partecipato e vuole condividere le proprie soluzioni o miglioramenti ai miei, faccia pure :emoji_nerd::emoji_nerd::emoji_nerd::emoji_nerd::emoji_nerd:

E NIENTE, SALUTA ANDONIO!!:emoji_hand_splayed:
 
Ultima modifica:
Grazie per aver condiviso con noi queste soluzioni, torneranno sicuramente utili agli altri partecipanti! :emoji_slight_smile:

Mi azzardo a dire che le OII non sono adatte secondo me ad un "pubblico" prettamente delle scuole superiori, perché in genere le tecniche algoritmiche che bisogna usare sono più oggetto di studi ai corsi dell'università, l'ho provato io in prima persona. Nulla vieta, chiaramente, che gli appassionati si informino prima, ma il fatto che voglia proporsi come gara per gli "interessati" o chi studia informatica alle superiori secondo me è un po' penalizzante. Comunque una volta appresi i concetti base dell'algoritmica direi che le OII sono molto più divertenti di quanto possa sembrare all'inizio!
 
Grazie per aver condiviso con noi queste soluzioni, torneranno sicuramente utili agli altri partecipanti! :emoji_slight_smile:

Mi azzardo a dire che le OII non sono adatte secondo me ad un "pubblico" prettamente delle scuole superiori, perché in genere le tecniche algoritmiche che bisogna usare sono più oggetto di studi ai corsi dell'università, l'ho provato io in prima persona. Nulla vieta, chiaramente, che gli appassionati si informino prima, ma il fatto che voglia proporsi come gara per gli "interessati" o chi studia informatica alle superiori secondo me è un po' penalizzante. Comunque una volta appresi i concetti base dell'algoritmica direi che le OII sono molto più divertenti di quanto possa sembrare all'inizio!
Quoto in pieno. Per arrivare alle territoriali, bisogna superare le scolastiche, le quali sono abbastanza semplici se hai una buona logica e le basi della programmazione. Le territoriali sono invece un'altra storia: un 14enne si trova dinanzi a dei problemi che in genere sono programma universitario, questo dovuto anche a numeri fattori: al 1° e 2° anno non si studia programmazione, i successivi 3 anni si articolano in C++ (o meglio C, dato che l'OOP non si studia al 3°), Java e PHP, e una classe di studenti non è mai a paro livello, quindi gli insegnanti tendono a seguire un programma adatto a tutti.
Gli studenti che non hanno studiato quindi tutti gli argomenti che si presentano alle OII, compito degli insegnanti delle scuole, si ritirano o arrivano totalmente impreparati :emoji_confused:. Non è una coincidenza che la maggior parte degli studenti che passano alle nazionali sono del 4° anno.
 
Quoto in pieno. Per arrivare alle territoriali, bisogna superare le scolastiche, le quali sono abbastanza semplici se hai una buona logica e le basi della programmazione. Le territoriali sono invece un'altra storia: un 14enne si trova dinanzi a dei problemi che in genere sono programma universitario, questo dovuto anche a numeri fattori: al 1° e 2° anno non si studia programmazione, i successivi 3 anni si articolano in C++ (o meglio C, dato che l'OOP non si studia al 3°), Java e PHP, e una classe di studenti non è mai a paro livello, quindi gli insegnanti tendono a seguire un programma adatto a tutti.
Gli studenti che non hanno studiato quindi tutti gli argomenti che si presentano alle OII, compito degli insegnanti delle scuole, si ritirano o arrivano totalmente impreparati :emoji_confused:. Non è una coincidenza che la maggior parte degli studenti che passano alle nazionali sono del 4° anno.
Per l'appunto, anche io ho seguito questo percorso. Al quarto anno sono riuscito ad accedere alle territoriali ma più di lì non sono andato, anche perché dei grafi ne parlammo in fretta e furia nei primi giorni del terzo anno, ad esempio. La ricorsione è stata un argomento difficile del quarto anno e devo dire che l'ho capita pienamente solo all'università. Ma potrei anche citare la programmazione dinamica o tante altre cose e non dare necessariamente la colpa agli insegnanti delle superiori perché comunque il programma mi sembra un programma da superiori. Semplicemente le Olimpiadi dovrebbero essere orientate ad un altro tipo di concorrenti, infatti complimenti a quelli del quarto anno che riescono ad arrivare alle nazionali e complimentoni per chi riesce a vincerle!
 
  • Like
Reactions: sant0
Mi sono accorto che nel primo non funzionava nei casi 1 <= N <= 4. Mi sembra un po' primitivo quello da parte del comitato organizzativo fermarsi ai linguaggi C, C++ o Pascal, quando in altre gare simili online vi si possono usare anche Python, Ruby o Java. Di conseguenza ho riscritto i due programmi in Python, magari saranno utili anche a chi non mastica C++:
Python:
Perfavore, Entra oppure Registrati per vedere i codici!
Python:
Perfavore, Entra oppure Registrati per vedere i codici!