TOPIC

60% wrong answer

Gabriel Alves asked 2 years ago

O programa sempre dá 60% WO mesmo com todos os testes dando uma resposta correta:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int sanity(int*, int*, int, int);
int main(){
    int I, N, i, M, ig, o;
    ig = 0;
    i = 0;
    while(M != 0 && N != 0){
        scanf("%d", &N);
        scanf("%d", &M);
        if(M == N && M == 0 && N == 0){
            return 0;
        }
        int T[M];
        //printf("i= %d\nM= %d\n", i, M);
        while(i < M){
            scanf("%d", &T[i]);
            //printf("Escrevi T[%d] = %d", i, T[i]);
            i++;
        }
        i = 0;

        int i, o;
        int repetidos[M], blacklist[M];
        int nRep = 0, k = 0, ig = 0, TR = 0;

        /*for(i = 0; i < sizeof(T)/sizeof(T[0]); i++){
            printf("T[%d]: %d\n", i, T[i]);
        }*/

        for(i = 0; i < M; i++){
        //printf("Ti[%d]: %d ", i, T[i]);
            for(o = i; o < M; o++){
                //printf("To[%d]: %d\n", o, T[o]);
                if(T[i] == T[o] && i != o){
                    for(k = 0; k < M; k++){
                        if(T[o] == blacklist[k]){
                            TR = 1;
                        }
                    }
                    //printf("TR==>%d\n", TR);
                    if(TR != 1){
                        blacklist[nRep] = T[i];
                        nRep++;
                    }

                    TR = 0;
                }
            }
        }

        /*for(i = 0; i < M; i++){
            printf("blacklist[%d]==>%d\n", i, blacklist[i]);
        }*/

        //printf("%d\n", nRep);
        printf("%d\n", nRep);
        nRep = 0;
    }
    return 0;
}

int sanity(int *T, int *repetidos, int M, int aux){
    int i, j, hold = 0;
    for(i = 0; i < M; i++){
        for(j = 0; j < aux; j++){
            printf("%d com %d\n", T[i], repetidos[j]);
            if(T[i] == repetidos[j]){
                hold++;
                i++;
            }
        }
    }
    //printf("Hold == %d\n", hold);
    return hold;
}

Remember not post solutions. Your post may be reviewed by our moderators.

  • Luis Fernando Veronese Trivelatto replied 2 years ago

    60% WA significa que 60% dos testes deram resposta errada. Um teste que deu errado aqui nesse código foi o seguinte:

    20 20
    20 4 5 15 9 12 11 19 13 5 18 7 12 3 5 2 1 19 10 10 
    0 0

    A resposta deveria ser 4 mas aqui deu 3.

    Tem algumas variáveis no código que estão sendo usadas antes de serem inicializadas, então elas contém lixo da memória (por exemplo, o N e o M na primeira vez que a condição do while é executada, e também o vetor blacklist).

  • Otávio Meira Lima replied 5 months ago

    Tente usar variáveis com nomes legíveis, fica mais fácil para outros programadores entender sua lógica

  • Matheus Jahnke replied 1 year ago

    Cuidado pois os valores vão de 1 a N e não de 0 a N-1.