Ciao a tutti,
ho provato a risolvere il problema Vortex Improved Motors ma sbaglio tutti i test case
per violazione di memoria nonostante la memoria utilizzata è inferiore a 256MiB.
Inoltre a quanto pare il grader stampa caratteri strani.
Ciao! Vedo che ti da “with signal 11”: questo significa che si è verificata una delle seguenti cose:
a) il tuo programma lancia un’eccezione (improbabile a meno che ciò non sia voluto da te),
b) viene invocata la funzione abort() di cstdlib (perfino più improbabile a meno che non sia voluto da te),
c) avviene un errore chiamato “segmentation fault” (probabile), che significa che provi ad accedere a memoria che non ti appartiene, forse esci da un array senza accorgertene.
Ora purtroppo non posso dare un’occhiata al codice ma con un non troppo lungo debugging dovresti trovare l’errore.
P.S.: l’errore che si ha quando si esaurisce la memoria è il 9.
L’errore è qua: s = (s-1)%N;
Quando decrementi s può assumere un valore negativo e quindi quando accedi a need[s] violi la memoria.
Prova a sostituire con s = (s-1+N)%N;
Avete qualche consiglio sulla strategia risolutiva? Non mi va di andare a guardare direttamente la soluzione, piuttosto preferirei un hint sull’algoritmo.
Di certo sappiamo che se L[i] è minore di C[i], da i non è possibile fare un giro completo, quindi ho pensato di andare a ritroso (all’indietro) tenendomi il conto di quanta benzina avessi bisogno, però niente
Secondo la precedenza degli operatori del C++ la negazione viene prima del modulo, quindi direi (-a) % b. In ogni caso, se si parla di interi e non classi che hanno ridefinito il significato degli operatori, il risiltato è uguale sia se lo interpreti come -(a % b) sia se lo interpreti come (-a) % b