Ristorante 5/100

Ciao ragazzi ho provato a sviluppare l’algoritmo dell’esercizio “ristorante” e una volta inviato il codice ottengo 5/100 pt ovvero 6 output sbagliati su 20. Questo è il codice nel main:

{
long N, D, a[100000], M, R = 0, F = 0, S;

FILE *input, *output;
input = fopen("input.txt","r");
output = fopen("output.txt","w");

fscanf(input,"%ld %ld", &N, &D);
for(auto i=0; i<N; i++) fscanf(input,"%ld ", &a[i]);
fscanf(input,"%ld", &M);

    if(M>N)
    {
        sort(a,a+N);
        S = M - N;
        for(auto i=0; i<N; i++) R+=a[i];
        F = R - (S * D);
    }
    else if(M<N)
    {
        sort(a,a+N);
        S = M - N;
        for(auto i=0; i<M; i++) R+=a[i];
        F = R - (S * D);
    }
    else if(M==N)
    {
        for(auto i=0; i<M; i++) R+=a[i];
    }

fprintf(output,"%ld",F);

fclose(input);
fclose(output);
return 0;

Sapete dirmi dov’è l’errore ?

L’errore credo sia nei casi in cui M<N, perché tu togli al risultato finale un multa(che diventerà anche positiva in quanto M-N darà un valore negativo.
Dovresti evitare di calcolare S e togliere la “multa” in quel caso.