Si estoy usando Java para la codificación competitiva, ¿tendré problemas de tiempo más tarde por parte de jueces en línea cuando me sumerja en estructuras de datos y algoritmos?

Codifiqué en Java durante los primeros meses después de comenzar la programación competitiva, ya que ese era el idioma que me enseñaron en la escuela y el idioma con el que me sentía más cómodo.

Estaba probando el IOI. Una regla importante para IOI es que no se le permite llevar ningún código de libro ni usar bibliotecas preescritas. Codifica todo desde cero. Esta regla me hizo cambiar a C ++.

Según yo, estas son las principales ventajas de C ++ sobre Java: –

  • Necesitas escribir código menor. Java es detallado: debe declarar clases para todo (¡incluso pares!). C ++ STL tiene estructuras que pueden ser realmente útiles para la programación de concursos.
  • C ++ es más rápido. No necesita cien líneas de código solo para optimizar su entrada. cin con ios :: sync_with_stdio(false) funciona bien.
  • C ++ tiene funciones ingeniosas como next_permutation() y random_shuffle() que son útiles para concursos.

Dicho esto, los usuarios de Java no están en desventaja para la mayoría de los concursos. IOI es solo un caso especial. Además de algunos problemas SPOJ y CodeChef innecesariamente estrictos, Java funciona bien para casi todo. Se supone que los creadores de problemas deben asegurarse de que los usuarios de Java no estén en desventaja. Por lo tanto, mientras prueban los problemas, se aseguran de enviar una solución Java que también funcione dentro del TL. No he encontrado un problema en CodeForces hasta ahora que no se pueda resolver en Java.

En algunos casos, puede encontrar que alguna solución C ++ implementada horriblemente se comprime dentro del TL, mientras que una solución Java implementada de la misma manera no lo hace. Estos casos, sin embargo, son muy raros.

Es interesante notar que algunos de los mejores programadores competitivos del mundo usan Java. Algunos de los más notables son Petr, Egor y Uwi. Si tiene las bibliotecas correctas y sabe cómo usarlas bien, debe codificar tanto como cualquier usuario de C ++. Simplemente puede leer las soluciones de los usuarios mencionados anteriormente para construir su biblioteca de programación competitiva de Java.

Algunas personas incluso prefieren Java a C ++ porque creen que crean menos errores. El compilador de Java es bastante estricto. No puede acceder a un índice de matriz si su índice está almacenado en long ; No puede almacenar 1 o 0 en boolean ; No puede acceder a un índice negativo durante el tiempo de ejecución. Dichas reglas no se aplican en C ++ y, a menudo, conducen a errores esquivos.

tl; dr: Quédate con Java si realmente te gusta. Puede ser útil hacer una buena biblioteca Java de programación competitiva. Además, ignore ciertos problemas de SPOJ con límites de tiempo increíblemente estrictos 😛

A2A

Me preocupa si tengo la mejor solución o no.

Claro, no me importará un lenguaje de programación, tampoco límites de tiempo.

El cálculo es muy simple. El juez se ocupará de la solución para pasar el límite de tiempo que proporcionaron para el lenguaje de programación que admiten.

Estaré feliz de fallar con 1.1 segundos, que pasar con 1 segundo. Porque mi aprendizaje para encontrar la mejor solución será excelente si fallo.

Me encantará este fracaso y aprenderé de él.

Es obvio que la CP en los algoritmos es una solución de problemas abt, por lo que resolver de una mejor manera no debería considerarse como un problema, sino una oportunidad para mejorar.

Una vez, hubo un problema en la manipulación de bits, lo resolví usando caracteres en lugar de bits. Claro que no pude dormir ese día, hasta hoy me siento culpable por usar 7 bits más por cada bit, de tantos elementos de N. Ahora, ¿quién es el error? Curator me ayudó a obtener 50 puntos o más, es decir, puntos completos, cuando primero quería intentarlo de manera fácil pero se resolvió, y obviamente debido a esos puntos fáciles, perdí la oportunidad de ser mejor en pedazos, porque una vez obtenemos puntos completos, seguimos adelante, pero esta vez no estaba contento por muchos días después.

Entonces, si enfrenta problemas con un lenguaje de programación como Java en un juez en línea bien conocido, entonces hay una gran oportunidad para aprender con anticipación.

Me he enfrentado al problema similar. Más tarde descubrí que no hay necesidad de preocuparse por el lenguaje de programación que usamos en los sitios de programación competitiva en línea.

Porque, en casi todos los sitios de CP, el límite de tiempo variará con respecto al lenguaje de programación que usamos. Sin embargo, una solución Java lleva mucho más tiempo en comparación con un programa C ++ bien codificado para el mismo enunciado del problema.

Si solo se concentra en la mejora de sus habilidades algorítmicas, le recomendaría que se apegue al mismo lenguaje de programación con el que se siente cómodo, en lugar de pasar tiempo aprendiendo un idioma con el que no está familiarizado.

* Feliz codificación *

-Sravan Palaki

Es posible que tenga problemas con Java. Hablando en términos prácticos, básicamente está garantizado que una solución C ++ bien optimizada pasará, ya que el autor del problema debe asegurarse de que pueda obtener alguna solución (bueno, con suerte). Si el límite de tiempo es de 1 segundo y su solución C ++ tarda 0,8 segundos, es posible que una solución Java no pueda completarse en 1 segundo. Algunos jueces en línea tienen un límite de tiempo más largo para Java, o permiten a los autores de problemas establecer límites de tiempo por idioma para problemas particulares, pero a veces ese no será el caso, por lo que es útil tener C ++ en su arsenal.

Simplemente siga codificando en el idioma que elija, no debería importar mucho. Por supuesto, ambos tienen algo de

ventajas, pero Java es suficiente, importa más cómo se llega a la solución que la solución que utiliza.

He tenido un problema donde Java era demasiado lento, pero era más un límite de tiempo en el problema original que cualquier otra cosa. La solución al problema fue O (1).

El único problema es que algunos de los tutoriales de la comunidad están en c ++, ya que es más utilizado, aunque hoy en día en sitios como geekforgeeks también se ven implicaciones de algs en java y python.

Absolutamente no. El actual # 2 del mundo, Petr Mitrechev, usa Java y deja a todos en el polvo. Los principales OJs se aseguran de que pase el algoritmo correcto. He estado usando Java personalmente desde hace un año para la programación competitiva y nunca se me ha ocurrido que Java haya agotado el tiempo de espera y haya pasado la misma solución de C ++.