|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2004
Città: Gazzada (Va)
Messaggi: 186
|
[C] progetto su skyline
Ciao ragazzi rieccomi qua ad esporvi le mie problematiche:
ho un progetto da fare: mi servirebbe una mano per scegliere la giusta struttura dati da utilizzare e per mettere giù qualche pezzo di codice: il testo è: New New New York è la città più popolata nell'anno 3500 D.C. (costruita sulle ceneri di New New York). A NNNY si costruiscono grattacieli quasi ogni giorno. I grattacieli non sono fatti per durare in eterno. Già al momento della costruzione è nota la data della demolizione, talvolta vicinissima a quella di costruzione. Ogni grattacielo al momento della costruzione viene battezzato con un nome (univoco). Qualche volta, si decide di ristrutturare un grattacielo già esistente e si proroga la data della sua demolizione. New New New York si aaccia sul mare: la sua spiaggia si estende da Nord a Sud. Se la si osserva dal mare, di notte, sopra alla spiaggia appare un tipico skyline (la linea di conne fra cielo e grattacieli). Infatti, ogni metro di spiaggia (ad una certa latitudine) è sovrastato da un certo numero di grattacieli a longitudini diverse (talvolta uno o nessuno). Chiaramente, è sempre il più alto di questi a svettare sugli altri, e la sua altezza denisce l'altezza dello skyline su quel metro di spiaggia. In assenza di palazzi, lo skyline è alto zero. Il problema consiste nel registrare, un certo numero di volte durante la serie di costruzioni e abbattimenti, quante altre volte lo skyline si è presentato esattamente nella stessa forma in passato (per ni turistici e storici). Dati in input L'input consiste in una serie di righe. Nella prima riga compare un numero, che corrisponde alla lunghezza totale della spiaggia in metri (per esempio, se vale 5, la spiaggia comincia nel punto 0 e si estende no al punto 5). Ciascuna riga successiva descrive un evento quotidiano, oppure una query. Ogni giorno avviene soltanto un evento. Un evento può corrispondere alla costruzione di un nuovo palazzo, oppure alla ristrutturazione di un palazzo già esistente (con conseguente procrastinamento della sua demolizione), oppure ancora al semplice passaggio di una giornata (evento vuoto). Costruzioni e ristrutturazioni avvengono sempre nel primo mattino. La sera, quando è necessario, uno (o anche più) palazzi (arrivati alla ne della loro vita) possono essere abbattuti. Se nella riga successiva all'evento compare una query, allora il programma deve rispondere ad una domanda relativa alla notte successiva all'ultimo evento trascorso. E' Le righe che descrivono una query consistono nel solo carattere \punto interrogativo". Nel leggere questa riga, il programma dovrà stampare a schermo il numero di notti precedenti nelle quasi lo skyline si è presentato identico a quello della notte corrente . Ad esempio, se durante la notte relativa alla richiesta siamo in presenza di uno skyline inedito, si dovrà stampare il numero 0. Se lo skyline è identico a quello della notte di una settimana prima (ma diverso da quello di tutte le altre notti) si dovrà stampare il numero 1. Gli eventi di tipo costruzione cominciano con la stringa \new" (senza le virgolette), seguita dal nome del palazzo costruito, seguito da una tripletta di misure del grattacielo, seguito dalla durata prevista, cioè dal numero di giorni che il grattacielo deve durare prima di essere abbattuto. Le tre misure rappresentano, rispettivamente: da quale metro di spiaggia comincia e a quale metro finisce il grattacielo, e la sua altezza, in centimetri. Si tratta di tre numeri naturali. Ad esempio, se compaiono i numeri 4 6 1000, signica che il grattacielo si estende nell'intervallo che comincia a 4 metri esatti, nisce al sesto metro (sarà dunque lungo due metri), ed è alto 1000 centimetri (10 metri). La durata è espressa in giorni, ed e' un numero naturale strettamente maggiore di 0 che rappresenta il numero di giornate che devono trascorrere prima dell'abbattimento (salvo rimandi). Il grattacielo viene abbattuto la sera della sua ultima giornata, prima della notte successiva. Quindi, ad esempio, se la durata valesse 1, il grattacielo verrebbe abbattuto ancor prima della notte successiva. Gli eventi di tipo ristrutturazione cominciano con la stringa \renew" (senza le virgolette), seguita dal nome del palazzo in questione, seguito dal numero di giorni di durata ulteriore da attribuire al grattacielo. Gli eventi vuoti consistono nella lettera \v" (senza le virgolette). La serie di righe è terminata da una riga composta da un solo punto esclamativo, che segnala la ne del problema. L'input viene fornito al programma sotto forma di file di testo, il cui nome viene specicato dal primo argomento passato al programma. Se non ne viene specicato alcuno, l'input deve venir letto direttamente dallo stdin. Dopo la lettura di un evento, il programma deve stampare un numero Alla ne della giornata a cui l'evento fa riferimento. Facciamo ad esempio il seguente caso di le di input. 15 new aaa 7 10 2500 3 new bbb 5 10 1500 100 ? new ccc 7 9 2500 100 new ddd 9 10 2500 100 ? ! 2 Il primo giorno viene costruito aaa, e il secondo bbb. Al momento della la prima query, la seconda notte, saranno presenti entrambi i grattacieli aaa e bbb. Dal metro 7 al metro 10 (dunque per tre metri) avremo uno skyline alto esattamente 25 metri (l'altezza del palazzo aaa). Dal metro 5 al 7, alto 15 (per il palazzo bbb, che in eetti prosegue anche no al metro 10, ma dal metro 7 al 10 la sua silhouette viene coperta da quella di aaa). Visto che questa congurazione non ha avuto precedenti, alla query si risponderà con uno 0. La mattina del terzo giorno viene costruito ccc. Alla sera dello stesso giorno, aaa viene abbattuto. Il quarto giorno viene costruito ddd. Al momento della seconda query, cioe la quarta notte, lo skyline è lo stesso della seconda notte (pur essendo in piedi un numero diverso di palazzi). Dunque alla query si risponderà con un 1. So noti che e' alla seconda query si sarebbe dovuto rispondere nello stesso modo anche se la prima query non fosse stata eettuata. Infatti, conta il numero di notti, indipendentemente dal numero di queries. Grazie in anticipo a tutti quelli che mi daranno una mano....
__________________
......IN FASE DI COSTRUZIONE PC NUOVO....... |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
non so se qualcuno ti darà una mano, è molto più facile che la gente faccia come me: scrolli il mattone e posti un commento inutile ^_^
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Oct 2004
Città: Gazzada (Va)
Messaggi: 186
|
up dai ragazzi una mano per favore
__________________
......IN FASE DI COSTRUZIONE PC NUOVO....... |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
|
è uguale a quello che avevi postato, e ti avevamo già detto come risolvere, tempo fa
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Oct 2004
Città: Gazzada (Va)
Messaggi: 186
|
hai ragione infatti lo avevo risolto però questo è un po' diverso e sopratutto la'ltra volta il prof mi aveva fatto storie per la strutttura dati utilizzata infatti mi avevo dato 18.Per quello ho ripostato il nuovo progetto simile per poter vedere di darmi una mano su una nuova struttura dati.
__________________
......IN FASE DI COSTRUZIONE PC NUOVO....... |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
|
Quote:
__________________
Khelidan |
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Oct 2004
Città: Gazzada (Va)
Messaggi: 186
|
ci sto pensando ma non sono troppo ferrato sugli algoritmi e sul C e visto il lavoro e tutto il resto ho chiesto appunto una mano a voi.
__________________
......IN FASE DI COSTRUZIONE PC NUOVO....... |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Sep 2003
Città: Tradate
Messaggi: 396
|
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
Ma, mi chiedo e vi chiedo, come è possibile che si debbano sostenere certi esami, se non si conosce neanche la materia per affrontarli ? Davvero, non capisco ![]() Se non conosco (int questo caso) il "C" , com'è possibile che devo affrontarci addirittura un esame ? Chiedo ancora scusa all'autore per l'OT .
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Sep 2003
Città: Tradate
Messaggi: 396
|
Quote:
Probabilmente e' lui, che, a quanto ho capito, non seguendo i corsi non ha capito.. |
|
|
|
|
|
|
#11 | |
|
Member
Iscritto dal: Oct 2004
Città: Gazzada (Va)
Messaggi: 186
|
Quote:
Io ho fatto informatica non per diventare programmatore ma ben si per diventare sistemista.E infatti lavoro in un'azienda come sistemista. E' vero basta studiare e applicarsi ho già svolto almeno 3 progetti ma purtroppo le mie doti del C non sono proprio affini.Io vi ho chiesto una mano su che struttura dati utilizzare non su tutto il codice.Ho chiesto una mano perchè per me il C risulta difficile anche avendolo studiato per anni. Quindi non è un problema di studiare fidati torno dal lavoro e mi faccio un C___o quadro pr poter finire l'università visto che mi mancano solo due esami. Ciao ringrazio tutti per gli aiuti che mi darete....
__________________
......IN FASE DI COSTRUZIONE PC NUOVO....... |
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2782
|
Io terrei un vettore di liste ordinate (per altezza) di grattacieli.
Il vettore conterrà all'indice 0 la lista di grattacieli che iniziano al metro 0, all'indice 1 quelli che iniziano al metro 1 e così via. In questo modo ricavare lo skyline di un giorno è semplice e veloce (complessità O(n) nel numero di metri). Ogni sera dovrai scorrere tutte le liste per decrementare i giorni di vita ed eliminare quelli che sono arrivati a zero (quindi complessità O(n) nel numero di grattacieli). Rinnovare un grattacielo ha la stessa complessità perché devi cercarlo per nome all'interno delle liste. Aggiungere un grattacielo ha sempre complessità O(n) perché i grattacieli potrebbero iniziare tutti allo stesso metro e quello da inserire potrebbe essere il più basso. Lo skyline lo calcolerei tutti i giorni e lo metterei da parte insieme a quelli già calcolati, quando è richiesta una query confronti lo skyline del giorno con i precedenti (già calcolati) e quindi nuovamente con complessità O(n). Tutte queste complessità valgono se utilizzi delle liste semplici, se poi usi delle strutture un po' più sofisticate (come degli heap) si può migliorare. Inoltre potresti tenere in memoria anche più di una struttura dati per usare quella più adatta all'operazione che devi eseguire (in questo caso devi fare attenzione a mantenere coerenti i dati in tutte le strutture). Spero di non aver dimenticato nulla. |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
[quote=matteo.pata;33087307]
Cut [\QUOTE] Non devi spiegarmi ne giustificarti di nulla, almeno con me Ho premesso che non era direttamente rivolto a te ma è che mi capita spesso di leggere 3d di richiesta di soluzione completa(e non è il tuo caso) di un esercizio perchè non si conosce la materia. Per quanto mi riguarda è diverso tempo che sono confinato ad un livello basso di preparazione e di esperienza perchè, se è vero che di passione ne ho da vendere, non avendo fatto l'università ho delle enormi lacune che difficilmente (idea mia) da autodidatta si riescono a colmare. Scusami ancora per l'OT
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
#14 |
|
Member
Iscritto dal: Oct 2004
Città: Gazzada (Va)
Messaggi: 186
|
tranquillo non l'ho presa sul personale era solo per chiarire un po' la mia situazione.Diciamo che cmq esperienza personale, Si ti posso dare una mano nel programmare i docenti universitari ma la maggior parte delle cose te le devi vedere per conto tuo.Le basi te le danno per bene e poi sei te che ti devi smazzare il resto.
Cmq rimango sempre in attesa di info sul mio progetto
__________________
......IN FASE DI COSTRUZIONE PC NUOVO....... |
|
|
|
|
|
#15 |
|
Member
Iscritto dal: Oct 2004
Città: Gazzada (Va)
Messaggi: 186
|
UP....please aiutatemi...
__________________
......IN FASE DI COSTRUZIONE PC NUOVO....... |
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2782
|
Veramente io avevo scritto un post 4 giorni fa... in effetti non sono sceso molto nel dettaglio.
Ho pensato che potresti implementare più strutture dati (come accennavo nello scorso post) in modo da coprire più o meno tutte quelle che avete visto durante il corso. |
|
|
|
|
|
#17 |
|
Member
Iscritto dal: Oct 2004
Città: Gazzada (Va)
Messaggi: 186
|
si il post mi è risultato utile..non so però ancora come tenere traccia dei vari skyline creati...praticamente non so in che struttura dati salvarli,perchè ogni volta che creo o distruggo un grattacielo devo tenere traccia dello skyline.
__________________
......IN FASE DI COSTRUZIONE PC NUOVO....... |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2782
|
Io lo vedo intuitivamente come una lista di coppie di valori (metro,altezza) in cui per risparmiare spazio si possono eliminare tutte le coppie la cui altezza non cambia rispetto alla coppia precedente. Quindi per determinare se due skyline sono uguali basta confrontare le due liste. Per rendere i confronti ancora più veloci puoi tenere dei codici hash delle liste in modo che se l'hash non corrisponde non perdi tempo a confrontare le liste.
|
|
|
|
|
|
#19 |
|
Junior Member
Iscritto dal: Dec 2006
Città: GERMIGNAGA
Messaggi: 2
|
è lo stesso progetto che sto facendo anche io =D
ti mando un messaggio privato... |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:52.





















