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: –
- ¿Por qué el orden de selección no se denomina orden de intercambio?
- ¿Cuál es el enfoque para resolver GSS1 y GSS3 en SPOJ usando árboles de segmentos?
- ¿Cómo funcionará el algoritmo KNN para la segmentación de imágenes?
- ¿Cuál será el algoritmo de rotación correcto en C?
- ¿Cuál es la mejor estructura de datos para almacenar y realizar una adición de dos números grandes de 512 bits?
- 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
conios :: sync_with_stdio(false)
funciona bien. - C ++ tiene funciones ingeniosas como
next_permutation()
yrandom_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 😛