Erro spoj SIGSEGV [RESOLVIDO]

1. Erro spoj SIGSEGV [RESOLVIDO]

Paulo
paulo_moc

(usa Ubuntu)

Enviado em 02/12/2012 - 11:18h

olá pessoal, estava tentando resolver um exercicio do spoj, testei aqui em casa e ta funcionando, mas quando envio para o spoj, ele retorna esse erro: SIGSEGV, sei que esse erro é causado por violação de memória, então caso alguém queira ajudar eu vou postar o código que fiz e o link do exercicio:

http://br.spoj.pl/problems/BINGO10/

código:


#include <stdio.h>

int main(int argc, char* argv[])
{
int N, B;
int i, j, tq=0, cont;
char testes[51];
int bolas[91];
int numeros[90];
int r;


while(1)
{
scanf("%d%d", &N, &B);

if(N == 0 && B == 0)
break;

cont = 0;

for(i = 0; i < 91; i++)
numeros[i] = -1;

for(i = 0; i < B; i++)
{
scanf("%d", &bolas[i]);
}

//Subtrai todos os números entr si e
//guarda os resultado que devem ser considerados(0 ate N)
//e se o vetor estiver preenchido (cont == N+1)
//quer dizer que é possível encontrar todos os números atráves da subtração destes.
for(i = 0; i < B; i++)
{
for(j = 0; j < B; j++)
{
r = bolas[i] - bolas[j];
if(r >= 0 && numeros[r] != r)
{
numeros[r] = r;
cont++;
}
}
}

if(cont == N+1)
testes[tq] = 'Y';
else
testes[tq] = 'N';

tq++;
}

for(i = 0; i < tq; i++)
printf("%c\n", testes[i]);

return 0;
}


Não sei se o algoritmo está na forma mais simplificada...


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 02/12/2012 - 12:20h

De novo: quem disse isso?

O SPOJ não liga para quando você imprime as coisas. O que ele faz, grosso modo, é jogar a sua saída num arquivo temporário e comparar a forma final desse arquivo com um gabarito. Aliás, o que ele fornece como entrada para o seu programa também é certamente algo que está predefinido num arquivo fixo. Ao contrário de um programa interativo rodado no terminal, entrada e saída nunca se misturam "visualmente" nesses arquivos.

De novo (de novo): terminou de testar, imprima. Não fique criando arrays para acumular saídas, a não ser que a questão mande você fazer desse modo. Muitas questões do SPOJ têm uma quantidade muito (MUITO mesmo!) grande de casos de teste, tornando inviável tal retenção de saída.

3. Re: Erro spoj SIGSEGV [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 02/12/2012 - 11:47h

De onde você tirou que existe limite na quantidade de caaos de teste, e que tal limite é 50?

Aliás, por que se preocupar com isso? Imprima 'Y' ou 'N' assim que terminar de analisar se todos os números são obteníveis.


4. Re: Erro spoj SIGSEGV [RESOLVIDO]

Paulo
paulo_moc

(usa Ubuntu)

Enviado em 02/12/2012 - 11:57h

Já enviei uma resposta com limite de casos de teste e eles aceitaram, e eu só posso imprimir a saída(resultados que foram guardados) quando a pessoa digitar dois zeros, o motivo de colocar um limite nos casos de teste é que em C fica muito dificil fazer isso, pense bem, o usuário que determina o limite, já tentei usar ponteiros, mas sempre gera algum erro.


5. Re: Erro spoj SIGSEGV [RESOLVIDO]

Paulo
paulo_moc

(usa Ubuntu)

Enviado em 02/12/2012 - 15:00h

Caramba! funcionou, hehe valeu ae, ja tinham em falando dessa maneira de testar esses problemas, imaginei que o spoj faria desta forma para ter a resposta tão rápida, valeu ae man. =]






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts