Execution killed (could be triggered by violating memory limits)

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++!


Non so, a me ha dato quest’output. Magari è stato un bug del sistema…