Il problema dropit mi sembrava abbastanza facile. Da quanto ho capito i procedimenti che richiede il problema sono 4:
- Se non c’è alcun elemento nel vettore L allora ci mette l’elemento, e aumenta M
- Se l’elemento appena estratto da N è uguale all’ultimo elemento piazzato in L, quindi L[M-1] == N[i] , allora deve “distruggere entrambi”, ovvero M = M-1
- Se l’elemento appena estratto è maggiore dell’ultimo di L, deve fare L[M-1] = N[i] - L[M-1] e L[M] = N[i] , quindi incrementare M
- Se l’elemento appena estratto è minore dell’ultimo di L, deve aggiungere due elementi a L: l’elemento appena estratto e la differenza tra i due: L[M] = N[i] e L[M+1] = L[M] - N[i]
Tuttavia il programma riceve come punteggio solo 10/100 (e fallisce miseramente tutti gli altri subtask). Il punto è che fallisce a partire dal secondo task del secondo subtask, quello in cui N arriva fino a 10. Ho provato tante serie di 10 numeri, anche quelle strane (per esempio 7 7 7 7 7 7), ma sembra funzionare egregiamente. Devo quindi concludere di avere frainteso il procedimento. Se sì, dove?
Qua non hai capito cosa succede: L [M-1] viene distrutto e N [i]=N [i]-L [M-1], Dopodiché ripeti la procedura con il nuovo valore di N [i]
4 Mi Piace
Fammi capire bene: se L[M-1] è minore di N[i] allora, in accordo al testo
si riduce della lunghezza di quello più piccolo
quindi N[i] -= L[M-1]
distrugge il più piccolo
quindi M–
continua a cadere su quello successivo
OK, quindi richiamare la procedura vedere come piazzare N[i] su L[M-1] (che sarà l’ultimo corrente).
quindi, in 13 56 32 44:
Inserisco 13; L: 13
56 è maggiore di 13, quindi calcolo 56 - 13 = 43; elimino 13; dato che non è rimasto niente, aggiungo in L 43; L: 43
Inserisco 32, e di conseguenza anche 43 - 32 = 11; L: 43 32 11
44 è maggiore di 11, quindi calcolo 44 - 11 = 33; elimino 11, quindi rimarrebbe 43 32 + 33; dato che 33 è maggiore di 32, calcolo 33 - 32 = 1; Ora L è 43; dato che devo aggiungere 1 diventa 43 1 42
Risultato: 43 1 42
È corretto?
EDIT: ho corretto perché avevo scritto nonsensi, che non rispettavano alcuna regola
fino a qua tutto ok
No, i procedimenti come li hai scritto sono corretti, ma L è 43
Aggiungendo 1 a L: 43 1 42 che è la soluzione
Scrivendo ad una ad una le operazioni:
Metto 13:
13
Metto 56:
43
Metto 32:
43 32 11
Metto 44:
43 32(elimino 11 e 44 diventa 33)
Metto 33:
43 (elimino 32 e 33 diventa 1)
Metto 1:
43 1 42
4 Mi Piace
Tutto chiaro, ho modificato il post qui sopra. Non so perché ma avevo scritto roba senza senso all’ultimo passaggio
EDIT: 100/100. Grazie ancora