Problema "negozi" OIS 2016 - Seconda Gara

Salve a tutti. Oggi mi ritrovo assieme al compagno @Miki a risolvere negozi, problema della seconda gara. Riusciamo a raggiungere al massimo il punteggio di 80/100 per problemi di tempo di esecuzione. Ci siamo trovati di fronte a più soluzioni:

La prima consiste nello scorrere lateralmente, rispetto al negozio attuale, l’array contenente i tipi dei negozi. Al primo match il ciclo si ferma e viene memorizzata la distanza coperta dal ciclo. Viene eseguita la stessa operazione anche sul lato opposto e si effettua alla fine un confronto per vedere quale delle due distanze sia la minore e quindi la soluzione al problema (Versione da 80/100).

Un’ altra soluzione trovata consiste invece nello scorrere l’array dall’inizio alla fine ed ogni volta che si trova il tipo di negozio desiderato, viene calcolata la distanza effetuando una sottrazione tra la posizione e l’indice se l’indice è minore della posizione, oppure tra l’indice e la posizione se la posizione è minore dell’indice.

Qualcuno saprebbe darci qualche dritta su come poter ottimizzare uno di questi due algoritmi?

Probabilmente la soluzione per ottenere il punteggio pieno somiglia di più al secondo approccio a cui hai pensato…
Prova a riflettere su questo: tu stai cercando fra tutti i negozi di tipo b, quello più vicino alla posizione a, però in questo modo controlli TUTTI i negozi, anche quelli che non sono del tipo che stai cercando.
Dato che ti interessa conoscere le distanze solo dei negozi di tipo b, potresti in qualche modo memorizzarli in modo da cercare solo tra i negozi del tipo richiesto?

Se non sono stato sufficientemente chiaro, a tua discrezione, puoi leggere qua sotto:

Il “tipo” di ciascun negozio è un intero compreso tra 0 e 100 000.
Se noi avessimo una lista di negozi per ciascun tipo, potremmo trovare più rapidamente il negozio più vicino?
Come posso realizzare queste liste di negozi ?
Se non la conosci già, potrebbe fare al caso tuo la classe vector.

1 Mi Piace

Grazie mille @filippos, leggendo il tuo commento mi è venuto in mente come risolverlo. Davvero un ottimo consiglio, grazie mille :slight_smile: Appena possibile io ed il mio amico vedremo di implementarla. Mi stavo chiedendo in quale struttura poterla memorizzare e fortunatamente il resto del tuo messaggio mi ha dato risposta. Grazie ancora.

1 Mi Piace