¿Qué es la programación competitiva?

Hola, solo quiero explicar la programación competitiva basada en mi experiencia de años compitiendo en ella.

Definición

La programación competitiva es resolver problemas bien definidos escribiendo programas de computadora bajo límites específicos .

Según la definición anterior, la programación competitiva tiene tres aspectos:

  • Problemas bien definidos . Se le presenta uno o más problemas. El enunciado del problema contiene variables, y debe poder responder al problema si se le da alguna combinación posible de valores de las variables. El problema estará bien definido: se le informará de las restricciones exactas de todas las variables, cualquier suposición necesaria, etc.
  • Programas de computadora . Escribes programas de computadora que resuelven los problemas. Tenga en cuenta que el “programa de computadora” aquí es un programa de línea de comandos muy simple; sin GUI o aplicación web sofisticada, etc. El programa de línea de comandos lee los valores de las variables de la entrada estándar y debe escribir la respuesta en la salida estándar.
  • Límites especificados . Su programa debe ejecutarse y producir la respuesta dentro de un límite de tiempo y memoria especificados. Además, debe escribir los programas en un conjunto específico de lenguajes de programación permitidos.

Para hacerlo más claro, ahora echemos un vistazo a un ejemplo de problema de programación competitiva.


Problema de muestra: bolas en canastas

Límite de tiempo: 1 segundo
Límite de memoria: 32 MB

Descripción
Tienes N bolas de colores. El color de la bola i-ésima está representado por el entero C [i]. Quieres llevar las pelotas con cestas. Una canasta puede contener un número ilimitado de bolas. También desea que por cada dos bolas de diferentes colores, estén en diferentes canastas.

¿Cuál es el número mínimo de canastas que necesitas para llevar todas las bolas?

Formato de entrada
La primera línea contiene un solo número entero N. La siguiente línea contiene N separados por espacios C [1], C [2], …, C [N].

Formato de salida
Un solo contiene el número mínimo de cestas.

Entrada de muestra
7 7
1 8 3 8 9 2 1

Salida de muestra
5 5

Restricciones

  • 1 <= N <= 100,000
  • Para cada i, 1 <= C [i] <= 1,000,000,000

Para aquellos que nunca han hecho programación competitiva: ¿pueden resolverlo? No hay problema, discutiremos la solución más tarde.

Propiedades del problema

Un problema de programación competitivo generalmente tiene estas propiedades.

  • La exactitud de una respuesta al problema es absoluta : será revisada por computadoras, no por humanos. No hay subjetividad presente. Por ejemplo, este no es un problema válido: “Si una persona generalmente abre N pestañas de Chrome al mismo tiempo, ¿cuánta RAM debería tener?”
  • La descripción contiene una historia de fondo para ocultar el problema real y hacerlo interesante. En este caso, el problema real se disfraza dentro de canastas y pelotas. Sin embargo, tenga en cuenta que algunos problemas también tienen una declaración directa.
  • Se darán algunos ejemplos de entrada / salida . Esto es para que no entendamos mal el formato de entrada / salida e incluso la descripción del problema en sí.
  • En última instancia, el problema está relacionado con la informática , las matemáticas o la lógica . Por eso, la solución se puede expresar algorítmicamente en un programa de computadora. Incluso la Programación competitiva 3 (libro) (Halim y Halim, 2013) define la programación competitiva como “Dados problemas conocidos de CS (informática), ¡resuélvalos lo más rápido posible!” .

Solución de problemas de muestra

Bien, ahora analicemos la solución del problema anterior, solo por diversión:

  • Debido a la regla, una canasta solo puede contener bolas del mismo color.
  • Como queremos minimizar el número de canastas, tiene sentido (y óptimo) llevar todas las bolas de un color en particular en una sola canasta.
  • Por lo tanto, el número mínimo de canastas es igual al número de colores diferentes de las bolas.

O, en otras palabras, podemos reducir (simplificar) el problema anterior en:
Dada una lista de números, cuente el número de números distintos en la lista.

Ahora puede preguntarse, ¿qué tiene que ver el problema anterior con la informática ? Esto se debe a que tiene que hacer un análisis (por ejemplo, análisis de complejidad ) antes de encontrar un algoritmo para resolver el problema. Existen múltiples formas de escribir un programa que cuenta el número de elementos distintos en una lista, pero solo aquellos que se ejecutan como máximo 1 segundo, consumen como máximo 32 MB de memoria y pueden manejar N hasta 100,000, se considerarán correctos.

La solución real y un código fuente de muestra se pueden encontrar en el primer comentario de esta respuesta. Por favor, pruébelo antes de leer la solución.

Esquema de puntuación

Para cada problema, el jurado proporciona un conjunto de casos de prueba secretos . Cada caso de prueba consta de una entrada válida y la salida correcta para la entrada correspondiente. Los archivos de entrada y salida deben cumplir con los formatos de entrada / salida y las restricciones especificadas en la declaración del problema. Se dice que el programa del concursante pasa un caso de prueba si, cuando se le da la entrada del caso de prueba, produce la misma salida que la salida del caso de prueba.

Como jurado, ¿tenemos que preparar los casos de prueba para todas las combinaciones de N de 1 a 100,000 (y, todas las combinaciones de la lista C, cada elemento puede ser hasta 1,000,000,000)? ¡El número total de combinaciones es tan grande! La respuesta es simple: generalmente no tenemos que hacerlo . Por lo general, solo creamos aproximadamente 20 casos de prueba, que contienen casos de prueba con N pequeño, N grande (st), N generado aleatoriamente y la lista C, y cualquier otra variación complicada.

Su puntaje a un problema depende de las reglas del concurso. En un concurso determinado, su programa debe pasar todos los casos de prueba para recibir puntos por el problema; mientras que en otro concurso, puede recibir puntos parciales dependiendo de cuántos casos de prueba pueda pasar su programa.

Variaciones

Lo que acabo de explicar es la forma estándar de problemas de programación competitivos. Hay algunas variaciones interesantes, por ejemplo:

  • No debe enviar el programa, sino solo los archivos de salida. (Se proporcionarán los archivos de entrada del caso de prueba oficial). Este tipo de problema generalmente se denomina problema de solo salida . Un ejemplo de ventaja de este tipo es que el límite de tiempo de este problema se convierte en la duración de todo el concurso .
  • Su programa no lee la entrada. En su lugar, debe escribir la implementación de una función / método en particular. La entrada estará disponible como los parámetros de la función. Este es el caso de la Olimpiada Internacional de Informática (IOI) desde 2010 y los SRM de topcoder.
  • En caso de problemas de optimización, el jurado ni siquiera tiene la respuesta óptima. En cambio, su puntaje dependerá de qué tan bueno pueda producir su programa. Cuanto mejor sea su respuesta, mayor será su puntaje. Los IOI más recientes tienen este tipo de problema.
  • … y muchos otros.

Concursos

Hoy en día, hay muchos tipos de formatos de concurso de programación competitiva. Hay varios criterios. Algunos:

Ubicación

  • En línea (por ejemplo, rondas de Codeforces, SRM de codificador superior)
  • En el sitio (por ejemplo, concursos locales)

Frecuencia

  • Anual (p. Ej., IOI, Google Code Jam, Facebook Hacker Cup)
  • Mensualmente (por ejemplo, https://www.codechef.com/ (CodeChef) concursos largos)
  • Varias veces al mes (p. Ej., Rondas de Codeforces, SRM de codificador superior)

Duración

  • ~ 1 – 2 semanas (p. Ej., Concursos largos de CodeChef, Topcoder Marathon)
  • ~ 1-3 días (por ejemplo, ronda de calificación de Google Code Jam)
  • 5 horas (por ejemplo, el Concurso internacional de programación colegiada ACM-ICPC (ACM-ICPC), IOI)
  • ~ 1 – 3 horas (p. Ej., Rondas de Codeforces, SRM de codificador superior)

Participantes permitidos

  • Estudiantes universitarios (p. Ej., ACM-ICPC)
  • Estudiantes de secundaria (p. Ej., IOI)
  • Cualquiera (por ejemplo, Google Code Jam)

Tipo de participación

  • 3 personas por equipo (p. Ej., ACM-ICPC)
  • Individual (casi todos los concursos que no sean ACM-ICPC)

Juez en linea

Este término es muy popular en el mundo de la programación competitiva. Es un sitio web que contiene una colección de problemas de programación competitivos, donde puede enviar soluciones libremente, en cualquier momento. Por lo general, no hay una duración específica, a diferencia de los concursos. Las personas generalmente practican su habilidad en jueces en línea.

Algunos jueces en línea bien conocidos:

  • Juez en línea de UVa – Inicio, junto con su sitio complementario uHunt :: UVa Hunting.
  • ACM-ICPC Live Archive – Inicio, que contiene problemas pasados ​​de ICPC.
  • Juez Esfera Online (SPOJ)
  • Además, la mayoría de los concursos en línea como Codeforces y Topcoder tienen sus propios archivos de problemas, donde puede enviar libremente soluciones como lo hace en los jueces en línea.

¡Espero que esta respuesta te dé una mejor comprensión de la programación competitiva! 🙂

En mi opinión, la programación competitiva es un tipo de deporte mental, en el que usted (o su equipo) utiliza sus habilidades de programación para escribir código para algunos problemas realmente interesantes y difíciles, y en el proceso intenta ganar una competencia en particular.

A diferencia de otros escenarios de programación, CP requiere que escriba código bajo varias restricciones, como el tiempo de ejecución y los límites de memoria para su programa. Además, debe resolver el número máximo de problemas en el tiempo estipulado.

Estas y todas las demás restricciones hacen de la PC una excelente forma de deporte mental, y es una excelente manera de mejorar sus habilidades de programación. Es reconocido y respaldado por casi todas las grandes compañías tecnológicas como Google, Amazon, Facebook, entre otras.

Hay muchos sitios web donde puedes practicar programación competitiva. Algunos de estos son-
CodeChef
TopCoder
SPOJ (Juez de Esfera en línea)
HackerRank
y muchos más….

Mucha suerte … 🙂

Bueno, si desea llevar su programación al siguiente nivel, debe tener una sólida base matemática. Cada súper codificador tiene una formación matemática realmente sólida . Y debido a esto, son capaces de resolver problemas complejos muy fácilmente y en baja complejidad de espacio y tiempo (O (1)). Aunque necesita poner varias lógicas detrás de cada problema, las matemáticas actúan como un catalizador (más que un catalizador).
Para lograr habilidades de programación buenas y competitivas, necesita practicar mucho (al menos 8 horas al día). Hay muchos jueces en línea (Codechef, SPOJ, Hackerrank, etc.) donde puedes encontrar muchas preguntas en varios dominios para practicar. Simplemente regístrese y comience su viaje de . Consulte también Análisis de diseño y algoritmos de Cormen, Rivest, Stien, aquí puede encontrar diferentes formas de resolver diferentes tipos de problemas.
Recuerde una cosa: “La gente a menudo confunde las competencias de programación con la medida de ser un gran programador en general. La verdad es que ninguna implica la otra”. – Por Mimino

“Mantener la calma y mantener la codificación”

¿Qué es la programación competitiva?

La programación competitiva es resolver problemas bien definidos al escribir programas de computadora bajo límites o restricciones específicos. Puede optar por cualquier lenguaje de programación como Java, Python, C, C ++ y muchos otros.

El requisito básico para la programación competitiva es que debe conocer cualquiera de los lenguajes de programación y cada persona no importa qué rama y campo, debe conocer al menos uno de los lenguajes de programación hasta el punto de que pueda borrar las pruebas preliminares básicas de Varias empresas durante la contratación.

Las razones por las que es importante son:

  • Tener una exitosa carrera profesional.
  • Tener la oportunidad de trabajar para una empresa innovadora que construye dicho producto.
  • Cumplir con la barra de contratación mínima en la empresa innovadora.
  • Tener éxito en entrevistas de programación / diseño en la empresa.
  • Tener la capacidad de resolver problemas algorítmicos dentro de un límite de tiempo y no estar estresado.
  • Ser bueno en la programación competitiva.

Hay muchos sitios web de programación competitivos que pueden ayudarlo en la programación competitiva no solo aumentando su capacidad de pensar, sino que también le permiten derivar el atajo de hacer la tarea en menos tiempo y de manera más efectiva. Algunos de los sitios web conocidos son Hackerearth, Hackerrank, Codechef, Spoj, Topcoder, Geeks para geek y muchos más. Practique en estos sitios web para ser un buen programador.

La programación competitiva es un deporte mental generalmente realizado a través de Internet o una red local, que involucra a los participantes que intentan programar de acuerdo con las especificaciones proporcionadas. La programación competitiva es reconocida y respaldada por varias compañías multinacionales de software e Internet, como Google, Facebook e IBM. Hay varias organizaciones que organizan concursos de programación regularmente, algunas son CodeChef, Sphere Online Judge (SPOJ), TopCoder, etc.

Esta puede ser una respuesta incompleta a su pregunta, pero muchas cosas no se pueden compartir con palabras.
Realmente te recomendaría que intentes hacer al menos 1-2 preguntas, puede que no te tome mucho tiempo, pero si te gusta, incluso toda la vida sería menos para explorarlo por completo.

Use este enlace, si es un principiante:

¿Eres nuevo en programación y quieres probar las aguas?

Comenzando | CodeChef

Programación competitiva, simplemente, escribir su código de manera eficiente (Complejidades de tiempo y espacio) en menos tiempo (tiempo necesario para escribir el código).
Significa escribir programa mientras compite con otros programadores para ganar la competencia.
Los mejores lugares para la programación competitiva:

  • Juez Esfera Online (SPOJ)
  • CodeChef
  • TopCoder
  • HackerRank
  • HackerEarth
  • Codeforces
  • Proyecto euler

etc.
Algunas competiciones reputadas son:

  • Concurso internacional de programación colegiada de ACM (ICPC)
  • Google Code Jam
  • Copa Hacker de Facebook
  • CodeChef desafío largo, Cookoff

Feliz codificación !!

La programación competitiva es un deporte mental generalmente realizado a través de Internet o una red local, que involucra a los participantes que intentan programar de acuerdo con las especificaciones proporcionadas. La programación competitiva es reconocida y respaldada por varias compañías multinacionales de software e Internet, como Google, Facebook e IBM. Hay varias organizaciones que organizan concursos de programación regularmente.

Una competencia de programación generalmente involucra al presentador presentando un conjunto de problemas lógicos o matemáticos a los concursantes (que pueden variar en número de decenas a varios miles), y los concursantes deben escribir programas de computadora capaces de resolver cada problema. La evaluación se basa principalmente en el número de problemas resueltos y el tiempo dedicado a escribir soluciones exitosas, pero también puede incluir otros factores (calidad de la producción producida, tiempo de ejecución, tamaño del programa, etc.)

La programación competitiva está resolviendo problemas que giran en torno a algoritmos y estructuras de datos lo más rápido posible.

Los jueces / competencias populares en línea incluyen Topcoder, USACO Training Gate, Codeforces, uVa, GCJ, FBHC, etc. Es importante tener en cuenta que si bien todos estos sitios web ofrecen la oportunidad de resolver problemas algorítmicos, el “estilo” de los problemas varía enormemente . Por ejemplo, Topcoder es muy sensible al tiempo, mientras que los problemas de USACO / IOI / ACM-ICPC son mucho más avanzados de lo que podría encontrar en otros jueces en línea. Incluso la diferencia en los problemas de IOI y ACM-ICPC es significativa, ya que ACM-ICPC evaluará a un programador en más temas que IOI.

La opinión general de la programación competitiva es retorcida. La programación competitiva no ha alcanzado el nivel de prestigio que tienen las matemáticas competitivas, pero en los últimos años la programación competitiva se ha vuelto lo suficientemente popular como para atraer la atención de varias corporaciones. Esto se debe en gran parte a que las entrevistas de ingeniería de software giran en torno a problemas algorítmicos, y aquí es donde comienza la controversia: muchos creen, con razón, que los problemas algorítmicos no son una indicación adecuada de la capacidad de desarrollo de software. Además, es posible (y ha sucedido) que algunos hayan obtenido puestos en corporaciones populares debido a su capacidad para tener éxito en las competencias de programación, pero no debido a su habilidad de desarrollo de software.

Sin embargo, otros han notado que los problemas algorítmicos no son una pérdida de tiempo. Donald Knuth señaló que considera a CS como el estudio de algoritmos, y competir en competencias de algoritmos es ciertamente mejor que no hacer nada en absoluto. El conocimiento de algoritmos clásicos y estructuras de datos sin duda ayudará a los ingenieros de software si se ven obligados a resolver un problema difícil que surge en el desarrollo de su proyecto.

En última instancia, si bien el objetivo de la programación competitiva es claro, si estas competencias de algoritmos son o no “buenas” para los programadores sigue siendo una controversia.

A continuación hay algunos párrafos copiados de una gran respuesta: ¿en qué se diferencia la programación competitiva de la programación de la vida real? Lo puse aquí, ya que creo que también respondería muy bien a esta pregunta.

Estas en la jungla Tienes una navaja de bolsillo. Alguien te pide que mates a un león de montaña.

Años de entrenamiento te han enseñado bien. Usas tu cuchillo para afilar un palo. Cortas enredaderas para azotar piedras afiladas en un extremo. Tal vez eres de una universidad superior, y has aprendido a extraer ingredientes esenciales de la vida de las plantas y los insectos a tu alrededor para crear un veneno con el que disparar tu arma.

Convencido de que tiene una forma efectiva y eficiente de matar al león, se propuso cumplir su tarea. Tal vez tu palo es demasiado corto o tus venenos no funcionan. Está bien: vives para refinar tu método e intentarlo de nuevo otro día.

Esa es la programación de la “vida real”.

En la programación competitiva, comienzas con los mismos recursos (una navaja de bolsillo), excepto que tienes 2 minutos para matar al león.

Tienes que sobresalir en cualquier idioma … quiero decir, aprenderlo hasta su nivel avanzado, ¡entonces solo tú podrás hacer codificación competitiva!

Hackerank, desbordamiento de pila, etc., muchos de estos sitios realizan competiciones de codificación para aquellos a quienes les apasiona la programación. En estas plataformas, una pregunta de codificación se presenta como un desafío y aquellos que la resuelven correctamente obtienen calificaciones y un rango.

¡Muchas compañías seleccionan a los mejores rankeadores de estas plataformas y les dan paquetes de salarios altos!

Además, puedes participar en hackthons donde se te dará un tema como ‘contaminación’ y tendrás que crear una aplicación de Android, un sitio web o un software para ello … la mejor parte de estas competiciones es que se llevan a cabo en hoteles de 5 estrellas y te quedas y disfruta de las suntuosas comidas gratis …

Así que codifique más … todo lo mejor 🙂

La programación competitiva es un tipo de programación que generalmente se realiza a través de Internet o una red local, que involucra a los participantes que intentan programar de acuerdo con las especificaciones proporcionadas. Los concursantes se conocen como programadores deportivos. La programación competitiva es reconocida y respaldada por varias compañías multinacionales de software e Internet, como google y facebook.

Una competencia de programación generalmente involucra al presentador presentando un conjunto de problemas lógicos o matemáticos a los concursantes.

La programación competitiva es un deporte mental generalmente realizado a través de Internet o una red local, que involucra a los participantes que intentan programar según las especificaciones proporcionadas. Los concursantes se conocen como programadores deportivos. La programación competitiva es reconocida y respaldada por varias compañías multinacionales de software e Internet, como Google, Facebook e IBM. Hay varias organizaciones que organizan concursos de programación regularmente.

Una competencia de programación generalmente involucra al presentador presentando un conjunto de problemas lógicos o matemáticos a los concursantes (que pueden variar en número de decenas a varios miles), y los concursantes deben escribir programas de computadora capaces de resolver cada problema. La evaluación se basa principalmente en el número de problemas resueltos y el tiempo dedicado a escribir soluciones exitosas, pero también puede incluir otros factores (calidad de la producción producida, tiempo de ejecución, tamaño del programa, etc.)

Citado de la programación competitiva

La codificación competitiva se centra casi por completo en su capacidad para encontrar soluciones eficientes a problemas difíciles pero bien definidos. En la mayoría de los casos, lo haces por tu cuenta.

ir aquí– codechef.com o hackerrank.com

More Interesting

¿Es posible que Nokia regrese al segmento móvil? ¿Puede Nokia convertirse en un duro competidor contra Apple, Samsung y otras marcas nuevas?

¿El progreso tecnológico resolverá los problemas ambientales de las humanidades?

¿Cuál es el trabajo de Pranav Mistry en Samsung en la división Think Tank?

¿Qué significará realmente Apple Pay en macOS y en iCloud para los consumidores?

¿De qué depende la selección de las tecnologías que hemos desarrollado en la historia?

Un ingeniero es teletransportado hace 2.000 años a Roma. Con su conocimiento de la física moderna, ¿qué podría juntar con la tecnología disponible?

Estoy subcontratando el desarrollo de software y me pregunto qué tecnología utilizar. ¿Debo elegir una pila LAMP o una pila .NET / SQL?

¿Qué sucede cuando las personas en todas partes interactúan con las tecnologías digitales?

¿Por qué las computadoras portátiles no tienen pantallas desplegables grandes?

La Biblia y el Corán supuestamente predicen el futuro, entonces, ¿a qué progreso útil (tecnología o medicina, etc.) han contribuido?

¿Cuáles son las aplicaciones de la tecnología Terahertz?

¿Cómo afectará la automatización de todo a la economía?

¿Por qué no hay revoluciones en la tecnología de batería?

¿Cuáles son algunos de los problemas que enfrenta en la vida que cree que pueden resolverse fácilmente con una idea creativa o con una mejor implementación de la tecnología?

¿Cuáles son los desarrollos tecnológicos más recientes que han aparecido en los automóviles?