Provando a risolvere più problemi (ois_biglietti e ois_truffa, per esempio), ottengo come punteggio 0/100 a tutti e, andando a guardare nei dettagli, tutti i subtask falliscono, con errore Execution killed (could be triggered by violating memory limits). Tuttavia, il tempo di esecuzione risulta essere minore di 0.01s, su un massimo di 1s a problema, e la memoria occupata risulta essere inferiore a 512 KiB (il limite è 256 MiB).
Lo stesso codice, compilato ed eseguito sul mio computer sui casi d’esempio, funziona senza problemi dando come tempo d’esecuzione circa 0.005s e come memoria occupata circa 1500 KiB.
Perché il sistema mostra quest’errore? Ho provato a implementare i programmi sia in C che in C++, ottenendo sempre Execution killed.
Controlla che gli indici che usi per scandire array, vectors … non vadano in negativo e/o non superino la dimensione del contenitore:
int v[100] indici validi da 0 a 99.
Grazie per la risposta, ho verificato gli eventuali problemi ma non sembrano esserci. In più, per esempio, il problema ois_biglietti
l’ho risolto senza utilizzare array o altro, appoggiandomi al template che è fornito sul sito degli allenamenti. Eppure continua a darmi lo stesso errore, anche se il mio codice effettua soltanto operazioni tra numeri (quindi teoricamente – anche se ho verificato che non succeda – si potrebbe verificare un integer overflow, ma non dovrebbe dare errore durante l’esecuzione, al massimo produrrebbe un risultato errato).
puoi postare il tuo codice per ois_biglietti.
Certo, questo è il codice in C:
#include <stdio.h>
#include <assert.h>
int compra(int N, int M, int A, int B)
{
if (A * M < B)
{
return A * N;
}
else
{
int result = 0;
result += (N / M) * B;
int remaining = N - ((N / M) * M);
if (remaining * A > B)
{
result += B;
}
else
{
result += remaining * A;
}
return result;
}
}
int main()
{
FILE *fr, *fw;
int N, M, A, B;
fr = fopen("input.txt", "r");
fw = fopen("output.txt", "w");
assert(4 == fscanf(fr, "%d%d%d%d", &N, &M, &A, &B));
fprintf(fw, "%d\n", compra(N, M, A, B));
fclose(fr);
fclose(fw);
return 0;
}
Ho solo modificato la funzione compra
, il resto è uguale al template (sono consapevole che il codice va sistemato, però vorrei capire prima l’entità dell’errore).
Ho risolto sostituendo nel main fr = fopen("input.txt", "r");
con fr = stdin;
e fw = fopen("output.txt", "w");
con fw = stdout;
. Grazie.
Bene così, però c’è una cosa che non mi è chiara: Ho fatto una sottomissione del codice che hai postato e ha fatto 100 sia col compilatore C che con quello C++!