Chiarimento testo dropit

Il problema dropit mi sembrava abbastanza facile. Da quanto ho capito i procedimenti che richiede il problema sono 4:

  1. Se non c’è alcun elemento nel vettore L allora ci mette l’elemento, e aumenta M
  2. 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
  3. 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
  4. 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