TÓPICO
PROBLEM 1430 - URI Fórum 1.0
Este tópico foi resolvido e não pode receber novas respostas.
-
grmachado respondido 8 years ago
W.A. 10%, mas todos os casos de teste passam. O que está errado!?
import java.*; import java.util.*; public class Main { public static void main(String[] args) { Map<Character, Integer> notas = new HashMap<Character, Integer>(); notas.put('W', 64); notas.put('H', 32); notas.put('Q', 16); notas.put('E', 8); notas.put('S', 4); notas.put('T', 2); notas.put('X', 1); Scanner s = new Scanner(System.in); String jingle = s.nextLine(); while (!jingle.equals("*")) { int compassosCorretos = 0; for (int i = 1; i < jingle.length(); i++) { int tempoTotal = 0; while (jingle.charAt(i) != '/') { tempoTotal += notas.get(jingle.charAt(i)); if (tempoTotal > 64) break; i++; } if (tempoTotal == 64) compassosCorretos++; } System.out.println(compassosCorretos); jingle = s.nextLine(); } } }
-
lud_lud respondido 7 years ago
Estou recebendo 10% de erro neste código.
Alguém pode me ajudar a encontrar o erro?
#include<bits/stdc++.h> using namespace std; double calcula(char letra) { if(letra =='W') return 1.00; else if(letra=='H') return 0.5; else if(letra=='Q') return 0.25; else if(letra=='E') return 0.125; else if(letra=='S') return 0.0625; else if(letra=='T') return 0.03125; else return 0.015625; } int main() { char letra; int certo,j; double soma; char musica[1000001]; while(gets(musica)) { certo = 0; soma = 0; if(musica[0]=='*'){break;} j = strlen(musica); for(int i = 0; i<j; i++) { if(musica[i]=='/'){ if(soma ==1.00){ certo++; soma = 0; } } else { soma += calcula(musica[i]); } } cout<<certo<<endl; } return(0); }
-
eldsmonteiro respondido 8 years ago
MODKaíque, a dica é, multiplicar todos esses valores por um número tal que o resultado para todos é um número inteiro.
-
santunes2 respondido 8 years ago
Na resolução deste problema me deparei com uma situação bem incomum. Um bug na flag de otimização -O2.
Peguei as entradas do site IME (http://maratona.ime.usp.br/hist/2009/problemas09.html) e compilei meu código usando a flag e não.
Quando não usando a flag obtive a resposta correta, e quando usando a flag recebia resposta errada em alguns casos de teste.
Parece que o bug foi resolvido na versão 4.8.3 do compilador como pode ser visto no link abaixo.
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60766Também segue uma discussão no codeforces sobre o assunto.
http://codeforces.com/blog/entry/11450Só queria chamar atenção porque esse tipo de problema poderia afetar diversas submissões dos usuários em outros problemas também.
-
dcpietropaolo respondido 9 years ago
#include <string.h> #include <stdio.h> int main (){ int a, b, c, cn, som=0, co=0; char i[1000], aux; while (1){ co=0; while (1){ scanf ("%c", &aux); if (aux=='\n'){ break; } if (aux=='W'){ som=som+64; } if (aux=='E'){ som=som+8; } if (aux=='T'){ som=som+2; } if (aux=='X'){ som++; } if (aux=='S'){ som=som+4; } if (aux=='Q'){ som=som+16; } if (aux=='H'){ som=som+32; } if (aux=='/'){ if (som==64){ co++; } som=0; } if (aux=='*'){ cn=1; break; } } if (cn==1){ break; } printf ("%d\n", co); } }
WA 100%
-
jbsilva respondido on nov. 7 2013
Na vida real é boa prática evitar problemas como buffer overflow, mas na maratona o melhor mesmo é alocar sempre bastante memória e não se preocupar com esses problemas (usar gets em vez de fgets), porque podemos assumir que o input vai ser bom.
-
tiagob.reis respondido on nov. 3 2013
Muda o 200 do seu
fgets(s, 200, stdin);
pra um número um pouco maior que seu código passa :)
-
alesom respondido on nov. 2 2013
Mudei, mas não deu certo ainda! Wrong answer. Troquei tudo para inteiro e comparei, mas não deu certo! E tentei fazer também a EPS. Nada não deu certo!
-
tiagob.reis respondido on out. 30 2013
Sua comparação (soma==1) é problemática. Como soma é um double, podem ocorrer erros de precisão. Reescreva o programa usando apenas inteiros ou considere que soma possa estar dentro de um intervalo (soma-EPS, soma+EPS), em que EPS é um número positivo pequeno.
-
alesom respondido on out. 29 2013
Está dando Wrong answer com este código, o que pode estar errado? Fiz vários casos de testes todos conferem.
#include <stdio.h> #include <string.h> int main(){ char s[201]; int i, cont, tam; double soma, aux; fgets(s, 200, stdin); while ((s[0])!='*'){ cont=0; tam=strlen(s); soma=0; aux=0; for(i=0;i<tam;i++){ aux=0; soma=0; while(s[i]!='/' && i<(tam-1)){ switch (s[i]){ case 'W': aux=1; break; case 'H': aux=0.5; break; case 'Q': aux=0.25; break; case 'E': aux=0.125; break; case 'S': aux=0.0625; break; case 'T': aux=0.03125; break; case 'X': aux=0.015625; break; } soma=soma+aux; i++; } if (soma==1){ cont++; } } printf("%d\n", cont); cont=0; fgets(s, 200, stdin); } return 0; }
Desde já agradeço!