Gente não estou conseguindo saber o que tem de errado no meu algoritmo pra resolucao deste probleminha ai do SPOJ, segue solucao:
(Tomando Resposta errada)
importjava.io.PrintWriter;importjava.util.Scanner;publicclassMortoVivo{privatefinalintMAX_PARTICIPANTES=100;privatefinalintMAX_RODADAS=100;publicvoidsolve(){Scannerin=newScanner(System.in);PrintWriterout=newPrintWriter(System.out);inttest=1;// numero do testewhile(true){intp,r,rest,comm,pComm;//p = participantes totais, r = rodadas, rest = participantes restantes da rodada, comm = comando da rodada (0 ou 1) que o chefe deu, pComm é o comando que cada aprticipante faz na rodadap=in.nextInt();int[]participantes=newint[p];r=in.nextInt();if(p==0&&r==0)break;for(inti=0;i<p;i++){participantes[i]=in.nextInt();}for(inti=0;i<r;i++){rest=in.nextInt();comm=in.nextInt();intz=rest;for(intj=0;j<rest;j++){pComm=in.nextInt();if(comm!=pComm){participantes[j]=-1;z--;}}int[]aux=newint[z];for(intj=0,k=0;j<rest;j++){if(participantes[j]!=-1){aux[k++]=participantes[j];}}participantes=aux;}out.println("Teste "+(test++)+" \n"+participantes[0]);}out.close();}publicstaticvoidmain(String[]args){newMortoVivo().solve();System.exit(0);}}
Também não sei (he he he). Estou dando um monte de chutes agora, que é função de quem já viu muita coisa nessa vida.
Você :
a) Debugou o programa para ver se não tem alguma coisa boba, como um nextInt que está lendo o dado errado? (Já vi muitos algoritmos certos que davam pau porque os dados foram entrados incorretamente )
b) Pegou a entrada, e refez o programa usando um “teste de mesa” (ou seja, fez as coisas no papel, em vez de sair cuspindo tudo no computador)?
V
Vinicius_Zibetti_Res
Sim, sinceramente criei muitos testes, no qual debuguei eles na mão ( de raiva que eu to de tomar wrong answer) e depois coloquei o algoritmo pra rodar e deu a mesma resposta que eu cheguei no teste de mesa…
Sinceramente não sei onde que ta errado…
G
gomesrod
Momento histórico
V
Vinicius_Zibetti_Res
Pois é né…
Os testes que eu fiz na mão deram o resulatdo esperado mesmo, ainda testei no computador pra ver, tambem deu certo…
PRAGA DE RESPOSTA ERRADA !
G
gomesrod
Não entendi bem a situação… para você está tudo certo, mas o resultado não bate com o exemplo que está lá no site?
Vc observou que abaixo tem um pessoal colocando comentários dizendo que o exemplo está com erro?
V
Vinicius_Zibetti_Res
Nao…
Eu realizei varios testes de mesa por mim mesmo que eu criei.
Testei todos eles na mão, segundo o que o problema pede.
Peguei estes testes e joguei no meu algoritmo.
Todos eles estavam batendo com o resultado obtido nos testes que eu fiz na mão.
Obs: Os do site estão corretos sim, faz o teste de mesa pra vc ver.
O que está acontecendo é que quando eu dou um submit na minha solução, o site me diz: “resposta errada”, ou seja, minha solução apresenta algum erro lógico.
G
gomesrod
Quando submeto o seu programa dá Tempo Excedido.
Aliás, estou conhecendo agora esse mecanismo de submeter os problemas e ter a avaliação automaticamente, muito legal!
Conforme tiver tempo livre vou tentando analisar, enquanto isso vamos ver se alguém aparece com mais idéias…
E
entanglement
Ou seja:
a) Ou seu algoritmo é ruim para entradas de dados grandes, ou
b) você tem de reimplementá-lo em outra linguagem (não Java, que é notoriamente lenta para resolver os problemas do SPOJ).
Note que P pode ser 100 e R pode ser 100, e o tempo limite é de 1 segundo. Veja o que ocorre no seu programa se você entrar com 100 participantes e 100 rodadas, e veja quanto tempo ele leva.
V
Vinicius_Zibetti_Res
AH se o problema fosse tempo limit, ele reclamaria “tempo limite excedido”, mas ele esta reclamando “resposta errada”.
V
Vinicius_Zibetti_Res
Merda, bolei outra solucao em C++, mas tava dando time limit pq eu tava usando CIN, dps q mudei ora SCANF deu certo.