TOPIC

100% Wrong Answer

🎈Renan Tashiro🎈 asked 3 years ago

A ideia da minha solução foi calcular quando o projétil irá atingir o solo com um determinado ângulo, resumindo eu fiz isso usando a fórmula Y(t) e igualei ela a zero, então substituo o t encontrado na fórmula X(t). Para achar o ângulo ótimo eu usei um método numérico, porém estou recebendo 100% WA. Antes eu estava recebendo 10%, então eu encontrei alguns casos que um determinado método falhava. Encontrei um método que a princípio resolve o problema, criei um gerador de casos de teste e testei com mais de 1000 entradas e todas bateram, segundo o uDebug.

Alguém tem uma ideia do que pode ser? Obrigado.

Obs: Quando eu mudei o método, não mudei as rotinas de imprimir a resposta, então não pode ser um erro de digitação que cause o problema, que aconteceu comigo em outros problemas algo semelhante a isso.

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

  • 🎈Renan Tashiro🎈 replied 3 years ago

    Bom, obrigado de qualquer forma. Acho que vou ler melhorar a outra solução do editorial e usar ela mesma.

  • Cleiton Teles Cordeiro replied 3 years ago

    O seu algoritmo está correto. A minha solução retornou 649.227113 e saída "N". Testei com a solução apresentada no editorial e obtive o mesmo resultado. Reenviei a minha solução e passou.

    Escrevi um script, no Matlab, para encontrar o ângulo e o tempo, utilizando as fórmulas do enunciado do problema. Com os valores dessa entrada, os valores retornados eram complexos. Ou seja, não há como ter um alcance de 650. Com 649.23 também retornou números complexos. Fiz outro teste com 649.227113 e o algoritmo encontrou duas soluções:

    a (em radianos) | t (instante de tempo final, Y ~ -H)
    0.032454        | 32.478459
    0.032378        | 32.478378

    Dado o elevado número de casos possíveis e o erro de arrendondamento na solução do uDebug, não tenho mais nada em mente que possa te ajudar a passar com busca ternária.

  • 🎈Renan Tashiro🎈 replied 3 years ago

    Igular a zero foi justamente para chegar na formula que voce apresentou.

    Eu fiz o que voce recomendou de testar variando apenas uma variavel e cheguei nessa entrada

    650 10000 20 19

    , que no uDebug diz que "Y", porém o meu algoritmo retorna que a maior distância possível é 649.227. O toolkit está certo?

    Obs: O método númerico é a busca ternária, que no editorial do problema eles indicam usar esse método com uma das possíveis soluções.

  • Cleiton Teles Cordeiro replied 3 years ago

    Não entendi o motivo de você ter igualado Y(t) a 0 sendo que, pela fórmula do problema, nota-se que a altura inicial é 0.

    Y(0) = 0

    Logo, a altura final será -H. A fórmula pode ser alterada para que a altura inicial seja H e a final 0.

    Y(0) = H -> Y(t) = H + Vsen(a)t - Gt²/2

    Levando em consideração que sua solução funciona em muitos casos de teste, talvez o problema esteja na precisão. Ou seja, podem haver casos que divergem devido ao nível de precisão exigida pelo problema e o nível de precisão da sua solução. Esta divergência pode ser fruto do seu método numérico ou de alguma aproximação que você tenha feito.

    A precisão exigida pelo problema está descrita no seguinte trecho: "...a diferença entre o alcance do canhão e o raio do campo é sempre maior que 0.01".

    Quanto ao método numérico, leve em consideração que há apenas um ponto de alcance máximo.

    A minha sugestão é gerar casos de teste com 3 entradas constantes e 1 variando. Por exemplo, gerar alguns casos de teste com R, H e V constantes e G variando. Caso não detecte nenhum erro, gere casos com uma outra combinação, de 3 entradas constantes e 1 variando.

    Espero ter ajudado.