¿Cuál es la mejor estrategia para mejorar mis habilidades en programación competitiva en C ++ en 2-3 meses?

Esta publicación ha sido tomada de la publicación del blog Learn to Code by Competitive Programming escrita por MV Kaushik cuando estaba haciendo una pasantía en HackerEarth

Aquí hay algunos pasos para comenzar y ser bueno en eso.

    • Póngase cómodo escribiendo código en cualquiera de estos lenguajes C, C ++ o Java . ¿Por qué solo C, C ++ o Java? Porque estos son los lenguajes estándar permitidos en cualquier competencia de programación.
    • Si ya eres bueno en C, se sugiere aprender C ++ . Es el lenguaje más popular entre los programadores competitivos debido a su velocidad y una excelente biblioteca en forma de STL (Standard Template Library).
    • Elija un juez en línea. Los recomendados son Topcoder y Codeforces . Estos sitios tienen problemas de alta calidad y también le permiten ver la finalización del concurso posterior al código de otros. Estos también categorizan problemas basados ​​en el tema. Algunos otros jueces populares incluyen SPOJ, CodeChef (impulsado por SPOJ) y HackerEarth.
    • Para empezar, comience con problemas simples que normalmente requieren la transformación del inglés al código y no requiere ningún conocimiento sobre algoritmos. La solución de Div 2 250 (División 2, 250 puntos) en Topcoder o Div 2 Problema A en Codeforces es un buen comienzo.
    • En las primeras etapas de la programación, uno tiende a escribir piezas largas de código, lo que en realidad no es necesario. Trate de mantener los códigos cortos y simples .
    • Practica estos problemas hasta que te sientas cómodo y puedas enviarlos por 240 puntos impares en cualquier día.
    • Comenzar a implementar algoritmos básicos (o estándar). Se sugiere leerlos de los tutoriales de Topcoder o Introducción a los algoritmos .

      1) Algoritmos de grafos: búsqueda en primer lugar (BFS), búsqueda en primer lugar (DFS), componentes fuertemente conectados (SCC), Dijkstra, Floyd-Warshall, árbol de expansión mínima (MST), ordenamiento topológico.

      2) Programación dinámica: problemas de programación dinámica estándar, como el corte de varillas, la mochila, la multiplicación de la cadena matricial, etc.

      3) Teoría de los números: aritmética modular, teorema de Fermat, teorema del resto chino (CRT), método euclidiano para GCD, logarítmico
      Exposición, Tamiz de Eratóstenes, Función Totiente de Euler.

      3) Codiciosos: problemas estándar como la selección de actividades.

      4) Técnicas de búsqueda: búsqueda binaria, búsqueda ternaria y encuentro en el medio.

      5) Estructuras de datos (básicas): pilas, colas, árboles y montones.

      6) Estructuras de datos (avanzadas): Trie, Árboles de segmentos, Árbol de Fenwick o Árbol binario indexado (BIT), Estructuras de datos desunidas.

      7) Cadenas: Knuth Morris Pratt (KMP), algoritmo Z, arreglos de sufijo / árboles de sufijo. Estos son algoritmos poco avanzados.

      8) Geometría computacional: Graham-Scan para casco convexo, barrido de línea.

      9) Teoría de juegos: principios básicos del juego de Nim, números de Grundy, teorema de Sprague-Grundy.

      La lista no está completa, pero estas son las que encuentras con más frecuencia en los concursos. Hay otros algoritmos, pero se requieren muy raramente en los concursos.

    • Puedes encontrar descripción e implementación de algoritmos estándar aquí
    • Una vez que tenga suficiente conocimiento de los algoritmos populares, puede comenzar a resolver los problemas de nivel medio. Eso es Div 2 todos los problemas en Topcoder y Codeforces. Es recomendable no ir a la Div 1 500 en este momento.
    • Aprender a codificar se trata de practicar. Participa regularmente en los concursos de programación. Resuelve los que no puedes resolver en el concurso, después del concurso. Además de Topcoder y Codeforces, también puede consultar los concursos de HackerEarth Challengesor Codechef.
    • Lea los códigos de los programadores de alta calificación. Compara tu solución con ellos. Puedes observar que es simple y más corto que tu solución. Analiza cómo se han acercado y mejora tus habilidades de implementación.
    • Lee los editoriales después del concurso. Puede aprender cómo resolver los problemas que no pudo resolver en el concurso y aprender formas alternativas para resolver los problemas que podría resolver.
    • Siempre practica los problemas que puedas resolver en el concurso . Supongamos que si puedes resolver Div 2 250 y 500 en el concurso pero no Div 2 1000, practica tantos problemas Div 2 1000 como puedas.
    • No pierda demasiado tiempo si no está obteniendo la solución o si está atascado en algún lugar.
    • Después de sentir que ha pasado suficiente tiempo, mire los editoriales. Comprender el algoritmo y codificarlo. No mire la solución real antes de intentar escribir el código por su cuenta.
    • La programación es muy práctica y práctica. Tienes que hacerlo continuamente para ser bueno en eso. No es suficiente resolver el problema teóricamente, tiene que codificarlo y hacer que la solución sea aceptada . Saber qué algoritmo / lógica usar e implementarlo son dos cosas diferentes. Se necesita tanto para ser bueno en la programación.
    • Programar la fase de aprendizaje tomará mucho tiempo y la clave es practicar con regularidad . Lleva algo de tiempo antes de que pueda intentar Div 1 500 y otros problemas difíciles. No renuncie a leer los editoriales e implementarlos, incluso si esto toma muchas horas / días. Recuerda que todo requiere práctica para dominarlo.

Lleva una cantidad de tiempo considerable antes de que seas bueno en eso. Tienes que mantenerte motivado en todo momento. Formar un equipo y practicar es una buena opción. No renunciar es la clave aquí.

Gracias por la A2A ..
Tener un conocimiento básico de estructuras de datos y algoritmos es excelente, pero la prueba real consiste en implementarlos y usarlos para resolver diversos problemas de la vida real disponibles en varias plataformas de codificación en línea. En primer lugar, debe conocer las diversas plataformas de codificación que están disponibles:

1) Concurso de programación, concurso de programación, programación informática en línea. Uno de los mejores sitios para practicar la codificación es Code Chef. Tiene tres retos mensuales.

  • Desafío largo que es un desafío de 10 días que comprende principalmente 10 preguntas.
  • Short Challenge, que es un concurso de 2,5 horas y se centra principalmente en su velocidad y su precisión.
  • La hora del almuerzo, que se centra principalmente en los niños de la escuela (una gran iniciativa de Code Chef) y es un concurso de estilo IOI.

2) Codeforces es un sitio web ruso dedicado a la programación competitiva.
Codeforces proporciona a todos los usuarios siguientes servicios principales:

  • la participación en los concursos cortos (2 horas), los llamados “Codeforces Rounds”, que se realizan una vez a la semana;
  • capacidad para resolver problemas de concursos anteriores con fines de entrenamiento;
  • “polígono” para crear y probar problemas;
  • Tipo de redes sociales mediante el uso de blogs públicos internos.

3) Página en topcoder.com. TopCoder es una empresa que administra concursos en programación competitiva. TopCoder organiza quincenalmente competiciones de programación competitiva en línea, conocidas como MER o “partidos de una sola ronda”, así como competiciones semanales de diseño y desarrollo. El trabajo en diseño y desarrollo produce un software útil que está licenciado con fines de lucro por TopCoder. Los competidores que participan en la creación de estos componentes reciben regalías en función de estas ventas.
Este es probablemente el más antiguo y tiene una increíble sección de problemas de concursos anteriores. La arena del codificador superior y la forma en que se debe codificar el problema son un poco diferentes de los sitios convencionales.

Luego hay otros como
Juez de Esfera Online (SPOJ)
HackerEarth | Ayudamos a los desarrolladores a encontrar buenos trabajos.
HackerRank, etc etc
HackerEarth también alberga varios desafíos de contratación para graduados y profesionales. Entonces el punto es que las competiciones te mantendrán ocupado todo el tiempo. Depende de tu motivación y dedicación en cuanto a cuánto puedes resolver.

Ahora, llegando a la parte en la que probablemente estés pensando “¿Cómo diablos debería empezar con todo esto?”

No hay nada nuevo que pueda decirte. Así que prefiero citar lo que Anudeep Nekkanti tiene que decir:

Si voy a comenzar a programar ahora, lo haría de esta manera.

  1. Resuelve los 200 problemas más resueltos en SPOJ, problema por problema. En 2 meses.
    (Esto enseñará todos los problemas estándar, algoritmos y habilidades de implementación)
  2. Resuelva problemas de CodeChef y CodeForces durante 2 meses.
    (Esto enseñará variaciones, podemos leer otras soluciones y aprender mejores formas. Omitir problemas fáciles)
  3. Resuelve problemas de TopCoder durante 2 meses.
    (Esto enseñará programación dinámica. Div 1 500p)
  4. Verifique los problemas regionales de ACM ICPC.
    (Grandes problemas de calidad)

Si tengo que aprender un nuevo algoritmo ahora, lo haría de esta manera

  1. Léalo de al menos 3-4 fuentes diferentes.
  2. Comprender la prueba de corrección y análisis en tiempo de ejecución.
    (Esto es muy importante, lo sabrá solo cuando se enfrente a problemas difíciles y no estándar)
  3. Pregúntate a ti mismo en cada paso para la corrección. Intenta ajustar la implementación.
  4. Consulta otras implementaciones.

Debe referirse a enlaces externos, tutoriales, libros, trabajos de investigación, etc. sobre diversos temas como, por ejemplo, Estructuras de datos y algoritmos que necesita para estudiar Acercamientos codiciosos, Dividir y conquistar, Algoritmos constructivos / iterativos, Gráficos, Árboles y otras Estructuras de datos … y algunos de los más difíciles, como Cuerdas, Árboles de segmentación, etc., que eventualmente aprenderá después de gran parte de sus esfuerzos … aparte de esto, debe desarrollar sus conceptos matemáticos de la mejor manera, para utilizar sus capacidades, incluidas las series ( Fibonacci, catalán, AP, GP, HP, etc.), fórmulas, probabilidad, permutación, combinación, etc. A veces hay un requisito de algunos otros temas (como Física) pero la mayor parte de la información relevante se proporciona en la pregunta en sí …

Y para tu propósito de ser un “Buen Programador” … Nunca intentes copiar códigos … incluso si está buscando algunos artículos editoriales o de investigación … intente estudiar la lógica y luego escriba el código usted mismo … Intente estudiar los códigos de otros codificadores … si no puede entenderlos … simplemente intente imprimir los resultados intermedios para comprender la lógica detrás de cada línea … Una cosa que puede afectarle durante la programación competitiva es hacer trampa … para superar esto, puede sacar una copia de los recursos relevantes y tratar de resolver los problemas a mano … Para más propósitos, use los foros de discusión para resolver sus problemas, hay tantos programadores increíbles y los mejores intérpretes que están sedientos de resolver sus dudas….

En cuanto a los recursos, algunos de los mejores que he encontrado hasta ahora son

Estructuras de datos y algoritmos
MAXimal :: algo
¿Cuáles son los algoritmos “imprescindibles” para los concursos de programación en línea?

Así que, finalmente, poniendo fin a esto.

if (BORING (article.txt) == TRUE)
cout << "Aburrido";
más
cout << "Interesante: p";

articulo yo diria que tu


y

Adios !!!

Hay muchas maneras diferentes en que uno puede aprender a codificar y difiere de persona a persona. Lo que puede ser útil para una persona puede no serlo para otra persona. Sin embargo, para sobresalir en la codificación competitiva, hay algunos requisitos previos que uno debe dominar antes de saltar a este emocionante mundo.

Debes ser competente con

  • Cualquier sintaxis de lenguaje de programación (se recomienda C ++ / Java)
  • Análisis de la complejidad de los algoritmos en términos de tiempo y espacio.
  • Habilidad para pensar en una solución de fuerza bruta.
  • Buena práctica de todas las estructuras de datos como listas, pilas, colas, árboles, gráficos, intentos, etc.

En cuanto a los recursos, hay muchos de ellos disponibles en Internet, pero lo importante es que tienes que descubrir tu taza de té: ” ¿Cómo quieres aprender?”

Aprender programación competitiva haciendo más y más práctica es una buena estrategia y muchos programadores competitivos solo siguen esto. Hay muchos sitios web en línea como Code-chef, Spoj, Hacker Earth, HackerRank, TopCoder y HackerBlocks que te ayudan a practicar más preguntas; Pero el proceso es tomar tiempo. Se tarda al menos 1–2 años en convertirse en un PRO en Codificación. Califiqué las rondas regionales de ACM-ICPC en 2015 y lo digo basándose en mi experiencia personal y de equipo.

Aprender asistiendo a algunos buenos campamentos de programación competitivos es otra estrategia probada y eficiente para aprender en un corto período de tiempo. Su mentor actúa como un catalizador en su aprendizaje y puede acelerar el proceso de aprendizaje. También soy un Mentor de Bootcamp de Programación Competitiva en Coding Blocks y he enseñado a más de 500 estudiantes en nuestros boot camps de aula sobre Codificación Competitiva en el último año. Muchos de estos estudiantes calificaron para la ronda regional de ICPC y también tomaron los exámenes de empresas como Google, Microsoft y Adobe después de estos campamentos de entrenamiento. Puede leer los comentarios sobre el Campamento de Entrenamiento de Programación Competitiva codificando Bloques aquí.

También me complace informarle que debido al éxito y la popularidad de nuestro Campamento de Entrenamiento de Programación Competitiva, estamos en línea y en VIVO esta vez y hemos lanzado el Campamento de Entrenamiento de Programación Competitiva por última vez a partir del 30 de septiembre de 2017 .

El curso está diseñado a mano para asegurar su éxito en desafíos como Google CodeJam, Google Kickstart, ACM-ICPC y más. Este programa de 8 semanas iniciará su incursión en el apasionante mundo de la codificación competitiva. Dominarás las técnicas de resolución de problemas más utilizadas, perfeccionarás tus habilidades de análisis matemático y los límites de tus habilidades de razonamiento. El curso cubrirá Estructuras de datos avanzadas como Árboles de segmentos , Índice binario / Árboles de Fenwick . Aprenderás a construir algoritmos que incluyan Programación Dinámica , Enmascaramiento de Bits , Algoritmos Codiciosos y Dividir y Conquistar . El curso también cubrirá otros temas competitivos avanzados.

Puede leer más detalles sobre el calendario de cursos e inscribirse en – Programación competitiva en línea usando el código de cupón – ” SUPERCODER ” para obtener un descuento anticipado de 2000.

Nota: el medio de comunicación de las clases será Hinglish, por lo que este boot-camp está recomendado solo para programadores de la India. Puedes ver este tutorial para obtener una “sensación” de la clase LIVE.

Espero que este bootcamp y consejos definitivamente te ayuden. ¡Sigue aprendiendo y sigue codificando!

Mejor

Prateek Narang

Mentor, Programación Competitiva Bootcamp

Miembro Fundador, Bloques De Codificación

Mucha gente le dice que está resolviendo muchos problemas y que se pondrá rojo en Topcoder / Codeforces algún día. Es cierto y es la única forma universalmente aprobada en la comunidad de programación competitiva, pero en realidad es solo la mitad de la historia. Primero, permítame explicarle la “ciencia” de la resolución de problemas (que no es muy científica, ya que solo fue desarrollada por mí mismo).

Para cada problema, para resolverlo, debes saltar un espacio. Puede ser una implementación difícil, o una observación difícil de ver, un algoritmo difícil, etc.

Para mí, algunos problemas son muy fáciles (por ejemplo, Codeforces div 2 A, B ..), porque esas brechas me parecen muy pequeñas, y al atravesarlas me siento como una caminata casual.

Algunos problemas son muy difíciles. La brecha es demasiado grande, o hay muchas brechas, y puedes quedarte atrapado en el medio porque estás demasiado cansado después de tal vez la primera brecha.

Usando esta ciencia, podemos explicar muchos fenómenos en el mundo de la programación competitiva:

  • Algunos chicos aprenden muy rápido, llegaron al div 1 en Topcoder / Codeforces solo después de un par de semanas desde que comenzó a programar. Algunas personas nacen con una gran capacidad de salto (habilidad para resolver problemas). Pueden saltar sobre las brechas promedio fácilmente.
  • Cuanto más entrenas, mejor te vuelves: Por supuesto, si saltas todo el día, debes ser un poco mejor saltando por los huecos, y así poder resolver problemas más difíciles en menos tiempo, ya que no necesitas muchos. De preparación mental o ejercicio de calentamiento antes de saltar.

Pero … también significa que, si solo resuelves problemas muy fáciles, aún puedes caminar a través de pequeños huecos. Puede caminar a través de huecos más rápido, pero aún no puede saltar.

Entonces, sí, la mejor estrategia para mejorar su habilidad de programación competitiva es practicar mucho, pero debe resolver los problemas gradualmente más difíciles, no solo los fáciles. Sal de tu zona de confort y desafíate a ti mismo. Por ejemplo, si resuelves problemas en Codeforces:

  • Ordenar por número de personas que lo resolvieron.
  • Comience con la página 1
  • Resuelve algunos problemas. Si cree que puede resolverlos en unos 5-10 minutos, ignore de inmediato los otros problemas, pase a la página 2
  • Continúa hasta que te sientas desafiado (por ejemplo, necesitas una hora para resolver / no puedo resolver en absoluto / …).
  • Haga un gran esfuerzo, pero si falla, mire el editorial, solicite soluciones, …

Intentaré responder a esta pregunta. Imagínate para los próximos 6 meses.

Etapa 1: Configuración de la base (2 meses)

Intente resolver los primeros 200 problemas en Sphere Online Judge (SPOJ). Durante los primeros 2 meses, intente resolver todos los problemas por su cuenta. Quédate con esto durante los primeros 2 meses hasta que ganes confianza.

Etapa 2: Pasar a Code Chef (2 meses)

Una vez que adquiera algo de confianza en los problemas de SPOJ, pase a codechef y practique durante los próximos 2 meses.

Etapa 3: Mover al codificador superior (2 meses)
Ahora muévase al codificador superior e intente competir en SRM.

Practica diariamente, intenta resolver 2 o 3 problemas por tu cuenta. Puede tomar una hora o 5 horas, pero hazlo por tu cuenta. Confíe en mí después de 2 meses, tendrá una gran confianza en la resolución de problemas.

Este es un deporte, cuanto más te entrenas, mejor eres. Espero que esto ayude.

Yo diría, simplemente salte al mar de la programación competitiva.

Desde mi experiencia personal, le sugiero que vaya al juez en línea para el cual también están disponibles las editoriales o las soluciones de otros. Te ayudaría a empezar.

Yo mismo pasé muchas horas solo para entender los primeros problemas. Pero luego encontrará lo que debe hacer después de resolver 10-15 problemas.

Si eres principiante en programación, entonces diría que escoges codechef o hackerrank. Hackerrank proporciona muy buenas secciones debido a las cuales puede practicar varios algoritmos y estructuras de datos y le resultará más fácil pensar en la solución si sabe qué estructura de datos sería útil para comenzar. Luego, puede pasar a otro juez que puede ser Sphere Online Judge (SPOJ), concurso de programación, concurso de programación, programación de computadora en línea, HackerEarth – Desafíos de programación y trabajos de desarrollador, etc.

También puede optar por resolver los primeros problemas de About – Project Euler. Proporciona muy buenos problemas y no se enfoca en el código. Después de resolver sus problemas, puede ir a hackerrank y también hay un concurso de codificación de problemas de projecteuler. Le dará la exposición a la codificación con los mismos problemas de manera genérica en lugar de resolver solo para valores constantes.

Feliz codificacion

Gracias por A2A.

Gracias por A2A. Así que quieres comenzar una programación competitiva. Estas son algunas de las cosas que te sugiero que hagas.

  1. Ser competente en uno de los lenguajes de programación. c ++, java, python son las recomendaciones. Además, java conduce a programas muy complejos e ineficientes a veces, y Python no está permitido en ICPC, por lo que mi recomendación personal es c ++. Pero java yc también lo harán.
  2. Comienza a aprender todo tipo de estructuras de datos y algoritmos de computadora muy interesantes. Aquí hay algunos enlaces útiles:
  1. Algoritmos y estructuras de datos
  2. Tutoriales algorítmicos
  3. Pistas y problemas de práctica. Este es mi favorito personal. Ya que enseña algo, y le da problemas para practicar en la misma pista para que tenga más confianza.
  4. Libros:
  1. Introducción a los algoritmos.
  2. El Manual de Diseño de Algoritmos (Segunda Edición)
  3. Programación Competitiva, 3ª Edición: Steven Halim
  • Elija uno o dos jueces en línea para trabajar en:
    1. Sphere Online Judge (SPOJ): Uno de los mejores y más difíciles jueces de todos los tiempos (no muy antiguo). Vaya a las secciones de problemas y ordene los problemas por los usuarios que han resuelto y comience a resolver en la secuencia. Si resuelves 300 problemas, significa que eres muy bueno en Programación Competitiva.
    2. HackerRank: tu dictraction más productivo. Te sugiero que participes en concursos desde este sitio. Sin embargo, la sección de problemas de práctica también es rica. Pero esto te resulta fácil cuando no puedes resolver un problema.
    3. Codeforces: otra vez increíble para los concursos en vivo y rico en problemas de práctica. Apégate a él y te hará increíble en CP.
    4. topcoder: Bueno, como su nombre indica, esto es para los mejores programadores. Esto es un poco difícil, y las calificaciones aquí son las que más importan. Incluso puede ser contratado en compañías muy grandes como Facebook, solo por su calificación en topcoder. Así que mejor no lo subestimes.
  • Practica como el diablo, eso es todo lo que necesita. Sea consistente, dé lo mejor de sí todo el tiempo y asegúrese de aprender cosas nuevas de sus competidores: esa es la manera muy efectiva de mejorar.
  • Todo lo mejor 🙂

    Les contaré mi historia. Cómo y por qué empecé a hacer programación competitiva.

    Después de completar el 1er año, mi sucursal se actualizó a Ingeniería Mecánica. Después de venir a la sucursal de Mecánica, no tenía idea de qué hacer más. Hablé con algunas personas mayores de mecánica e informática de IIT BHU al respecto ..

    Nunca había enfrentado un solo problema de codificación competitiva antes de ir al IIT. Me familiaricé con él en el segundo semestre del primer año. Era obligatorio estudiar el curso de lenguaje de programación C en el segundo semestre. Pero desafortunadamente al final del semestre no obtuve una buena calificación en este curso (obtuve la calificación B)

    Mi objetivo principal es hacer el trabajo después de 4 años de Btech. No tengo interés en más estudios superiores después de Btech. Así que uno de mi buen senior, Sourabh Rajendu, de la rama de informática de IIT BHU, me aconsejó que fuera a una codificación competitiva. Dio muchos consejos útiles para mejorar la codificación. También motivó mucho en cada etapa y cada día. Seguí sus consejos. Comencé en lenguaje C ++. Inicialmente, no pude resolver ni siquiera un nivel fácil de preguntas. Me sugirió que empezara desde HackerRank. Al resolver un problema, vi algunos editoriales y tutoriales de preguntas. Después de escribir códigos de 100–120 preguntas en 2–3 meses de preguntas de hackerrank de nivel medio y fácil, comencé a sentir que podía mejorar en este campo. Actualmente estoy tratando de elevar más mi nivel en la programación competitiva.

    Algunos consejos que me gustaría dar a los principiantes o que nunca hayan hecho Programación Competitiva:

    • Si tuviste interés en las matemáticas en los días escolares, puedes hacer maravillas con la codificación competitiva.
    • Está bien ver las soluciones y los editoriales de una pregunta si eres principiante. Pero trate de entender la lógica detrás de esto, no se preocupe. Escriba el código por su cuenta después de entender las soluciones en profundidad.
    • Intente resolver la pregunta por su cuenta al principio y luego prefiera ver las soluciones.
    • Trate de obtener la ayuda de personas mayores con experiencia en codificación competitiva. Incluso si no puede entender alguna solución de un problema, pregunte a sus personas mayores. Me había tomado la ayuda de algunas personas mayores como Amit Ranjan. Él está calificado como ACM ICPC y actualmente va a hacer prácticas en Microsoft.
    • Si eres principiante, tendrás que pasar una buena cantidad de tiempo para practicar. Puede haber un día en el que pueda resolver una sola pregunta. Pero no te desmotives por esto. Está bien si ha hecho una sola pregunta en todo el día.
    • No saltes inicialmente a los concursos. Primero resuelva unas 100 preguntas y luego vaya a los concursos de Hackerrank, Codeforces, principiante | CodeChef ..
    • Puedes ir a ver algunos artículos sobre GeeksforGeeks | Un portal de informática para los geeks.

    Espero que esto ayude .. Gracias ..

    Hace poco comencé la programación competitiva y enfrentaba el mismo problema que tú. Fui tonto y salté directo en septiembre Clash of HackerEarth. Aunque logré resolver dos problemas, me decepcionó mi propio desempeño. Así que traté de averiguar dónde me faltaba y descubrí que eran las matemáticas y la falta de conocimiento de la implementación de algoritmos y cómo modificarlos para un problema particular. Así que hice cosas siguientes (y sigo haciendo) para mejorar mi conocimiento.

    • Familiarízate con los conceptos de la teoría de números como la multiplicación modular, la permutación y la combinación, la probabilidad, los números primos, etc. ¡No huyas si las matemáticas te asustan, lucha!
    • Aprenda cómo implementar estructuras de datos básicas y de qué manera puede modificarlas para hacer lo que se necesita. Si ha terminado con lo básico, acceda a las estructuras de datos avanzadas.
    • Todos aprenden algoritmos y los implementan, pero la clave para dominar los algoritmos es aplicarlos en los problemas. Puede ser difícil comenzar a averiguar qué algoritmo aplicar y cómo. Cosas de Google, copie el código, ejecute el programa y cuando haya terminado, encuentre la mejor implementación posible de un algoritmo particular y apréndalos.
    • La complejidad de su código es importante, es posible que su lógica sea correcta pero su código no pudo pasar todos los casos de prueba debido a que el límite de tiempo excedió Así que piense en formas de acelerar el código eliminando los bucles redundantes, aplicando la estructura de datos y el algoritmo correctos, el enfoque dinámico (si es posible), etc.
    • No intente reinventar la rueda, use las funciones de biblioteca incorporadas, la estructura de datos, los algoritmos porque son más rápidos de lo que usted codifica. Si su idioma es C ++, aprenda a usar STL .
    • No se limite a utilizar el mismo idioma, ya que en breve desafío puede quedarse sin tiempo, por lo que si puede codificar un problema en particular más rápido en otro idioma, entonces cambie a otro idioma. (Yo uso Python 3)
    • Lee los editoriales y aprende de ellos.
    • Revisa el código de otros y aprende de ellos.
    • Puedes sentirte frustrado cuando nada toca las campanas. Está perfectamente bien, deja ese problema y prueba más tarde. Google sobre el problema, lea conceptos relacionados y vuelva a intentarlo.
    • Todo se reduce a la práctica. ¡Practica mucho!. Nunca te rindas, mantente fuerte y motivado

    Le sugiero que comience con Codemonk en HackerEarth. En realidad es para principiantes. Tiene buenos editoriales y luego problemas sobre estos temas. Poco a poco te llevará hacia conceptos más elevados.

    Intentemos mapear tu ruta para ser un codificador competitivo:

    1. Obtenga conocimientos básicos de sintaxis y semántica de C. Puede comenzar con cualquier idioma que desee, pero prefiero C, ya que le permitirá conocer todas las funciones básicas que otros lenguajes como Python resumen. C también es una iniciativa que lo transferirá a C ++. Ahora la selección de C ++ es preferida (por mi) ya que es fácil y tiene un gran soporte de la Biblioteca. No se preocupe, cubriremos sus detalles de C ++ más adelante.
    2. Para conocimientos básicos de CI, prefiera a Dennis y Ritchie: Amazon.com: El lenguaje de programación C (9780131103627): Brian W. Kernighan, Dennis M. Ritchie: Libros. Es el mejor libro que puede encontrar para C. Será un poco difícil para los principiantes, pero no se preocupe, hay más en stock para usted. Ahora, mientras lee las preguntas de práctica de D&R en la Olimpiada de Computación de EE. UU. (USACO). Este sitio web tiene preguntas fáciles junto con la implementación completa. Así que lea un tema sobre el libro y la práctica en USACO .
    3. Repita el paso 2 hasta que haya resuelto alrededor de 50-70 preguntas y haya cubierto temas como: matriz, entrada / salida, iteración, selección y otros bits básicos. La curva de aprendizaje en estos pasos es suave y no tendrá problemas para hacerlo.
    4. Ahora, en este paso, tiene un conocimiento básico de C y puede implementar sus pensamientos en el Código. Ahora podemos comenzar un camino más difícil: Estructuras de datos. DS es esencial para cualquier codificador. Son como tu línea de vida. La diferencia entre AC y TLE puede ser solo una única estructura de datos mal implementada.
    5. Bien es hora de un cambio. Cambia a C ++, el hermano mayor de C. La estructura básica de Código es similar pero obtendrá un soporte increíble de las características de Biblioteca de C ++. Ahora practique STL de C ++ y vea la colección pf Estructuras de datos que están en STL. C ++ también proporciona soporte de algoritmo, pero lo cubriremos más adelante. Ir a través de estos tutoriales para soporte STL. Encienda C ++ con la biblioteca de plantillas estándar: Parte 1 y encienda C ++ con la biblioteca de plantillas estándar: Parte 2. Son mejores y concisas.
    6. Ahora obtenga Bible of Coding: Cormen Introduction to Algorithms, 3ª edición: 9780262033848: Computer Science Books @ Amazon.com. Este es el libro más esencial que necesita en su vida de codificación competitiva. Tu compañero en línea será Codeforces. Prefiero Codeforces porque nos permite ver el caso de prueba en el que fallamos, para que podamos obtener lo que está mal. Simplemente comience con las preguntas con la menor dificultad, es decir, Máximo resuelto y comience a resolverlas. No se preocupe, fallará, obtendrá PE, obtendrá CE, obtendrá RTE, obtendrá TLE. Hazlos tus amigos, ya que serán tu mejor guía de aprendizaje. Aprenda de los errores, descubra lo que está mal y luego disfrute de AC. Cuidado: no veas el código de otros. Trate de resolverlo y si no puede después de muchos esfuerzos, luego véalo, obtenga la idea y codifique nuevamente. Nunca jamás copies el código .
    7. Repita el paso 5 hasta que haya resuelto alrededor de 50-70 preguntas y haya cubierto temas como dividir y vencer, codiciosos, retroceso y DP. DP también conocido como programación dinámica es la necesidad más importante. Practícalo todo lo que puedas. Este paso tiene una curva de aprendizaje poco pronunciada. Necesitas estar determinado en este paso. No pierdas la esperanza, disfruta de la codificación y continúa.
    8. Ahora viene la parte difícil: las matemáticas. Las preguntas matemáticas a menudo causan problemas pero son fáciles. Mathematics for Topcoders, Geometry Concepts: Conceptos básicos, Geometry Concepts: Line Intersection y sus aplicaciones, Geometry Concepts: Uso de Geometry en Topcoder Problems, Mathematics for Topcoders son los tutoriales que te ayudarán a cubrir las cosas necesarias.
    9. Genial, ahora tienes conocimientos básicos de C ++ STL y Algoritmos. Ahora que comienza el juego real, comienza con DIV 2 Competitions. Fácilmente podrá desempeñarse bien ya que tiene un gran conocimiento básico. Incluso si no encuentras tus defectos, improvisa y practica. Si tiene un buen desempeño, entonces será elegible para DIV 1. Lea siempre los editoriales y resuelva todas las preguntas que no haya hecho.
    10. Ahora repite lo mismo en las competiciones DIV1. Encuentra tus faltas, improvisa y practica.
    11. Ahora practique en Codeforces o vaya a TopCoder, lo que quiera.
    12. El último pero importante paso:

    mientras (vivo)
    {
    código();
    find_your_fault ();
    mejorar();
    práctica():
    }

    Hazme un ping si necesitas ayuda.
    Gracias.


    Respuesta original: la respuesta de Pratyush Khare a ¿Cuándo debo comenzar a participar en la programación competitiva?

    Los siguientes son sugerencias de mi experiencia:
    1. Elija un lenguaje de programación en el que le guste programar. Ya sea que elija C o PHP, no importa si está familiarizado con los pros y los contras del lenguaje.

    2. Centrarse en el pensamiento algorítmico. Si puede diseñar el algoritmo de solución para un problema complejo, entonces escribir código para él es solo un pedazo de pastel.

    3. Participe en competiciones en línea regularmente como Google CodeJam y otro concurso mensual en los sitios web como HackerRank, etc.

    4. No dude en utilizar papel y lápiz mientras diseña la solución para un problema. Es la mejor manera de visualizar el problema y su solución.

    5. Aprenda de los demás: obtenga la ayuda de sus amigos, mentores y, lo que es más importante, de sus competidores. En algunos casos, podrá ver el código de los competidores después del final del concurso. Si no quieres ganar, simplemente no pierdas la esperanza. Vea las presentaciones de sus competidores (top 3) y aprenderá mucho siguiendo ese código.

    Paciencia y hambre por aprender.

    La codificación es algo que evoluciona las capacidades de pensamiento de una persona.

    Como dijo Steve Jobs, “Nos enseña a pensar”.

    Así que comienza con la mayoría de los problemas resueltos en codechef, spoj, codeforces. No vaya por temas, solo resuelva, aprenderá el arte de leer un problema, analizar, pensar y codificar una solución.

    Después de eso, ya que empezará a sentirse cómodo con él, no se detenga, siga resolviendo los problemas más difíciles que el día anterior y resuélvalos. Siga las escaleras, que son una excelente manera de establecer objetivos y practicar un tema sistemáticamente. A2 juez en línea

    A veces, leería una etiqueta para un problema que dice que emplea el uso de alguna estructura de datos o algoritmo. Lee sobre esto y aborda el problema. Lentamente y gradualmente, irá encontrando algos y descubrirá que probablemente acaba de descubrir algo famoso del libro CLRS. Esa es la belleza de ello.

    Sigue practicando, y resolviendo problemas, no pares.

    Además, un punto que debe tener en cuenta es que, cada uno tiene su propio ritmo de aprendizaje, por lo que, aunque sería realmente tentador comparar, no lo haga con otros. Debido a que acaba de comenzar, y tal vez la persona con la que se está comparando ha estado haciendo CP durante muchos años, tiene más conocimientos y habilidades. Así que mantén tu progreso a la vista siempre, y siempre estarás feliz y motivado.

    Realiza todos los concursos de código de código y largos desafíos en codechef. Participa en Google Code Jam y Facebook Hacker Cup. Si usted es un pensador, lo disfrutaría a fondo, si no, tal vez no. En ese caso, intente el desarrollo que es más sobre diseño y organización de código y menos sobre lógica y análisis.

    Espero que ayude,

    Gracias,

    Mansi.

    He desarrollado un programa de capacitación diseñado para estudiar estructuras de datos y algoritmos que combina ( teoría + práctica) en proporciones adecuadas, como lo apoya la investigación.

    Comienza desde el nivel cero y termina convirtiéndote en un programador NINJA.

    Tal vez debería ver todo el programa una vez y decidir por sí mismo de dónde quiere comenzar.

    FASE 1 :: LUZ, INTERESANTE Y FÁCIL

    PARTE A- Video conferencias de MyCodeSchool DS

    -> Para el conocimiento práctico y la comprensión intuitiva de temas básicos

    -> Los videos son altamente trabajados en términos de información tecnológica y experiencia de usuario.

    -> El narrador Animesh Nayan ha hecho un gran trabajo explicando las cosas tomando ejemplos de la vida real y señalando los errores comunes que hacen los principiantes.

    -> Uno de los co-fundadores de esta startup fue una vez el codificador de India (humblefool). Para que pueda estar seguro de la máxima calidad.


    PARTE BProblemas de dominio HackerRank DS

    => Complementar la PARTE A resolviendo algunos ejercicios de codificación relacionados con DS aquí Subdominio de estructura de datos de HackerRank

    => Muchos de ellos también están diseñados por la misma gente en MyCodeSchool y están destinados a ser seguidos simultáneamente con las conferencias de video


    FASE 1.5 :: OPCIONAL

    => Estructuras de datos y algoritmos simplificados por Narasimha Karumanchi Lo bueno de este libro es que es divertido hacerlo.

    => Te permite dejar las matemáticas rigurosas que te chupan la sangre para más tarde.

    => Esta será una gran prueba de su comprensión de la FASE 1


    FASE 2 :: IR A PROFUNDIDAD

    NPTEL IIT-D Video Conferencias

    -> Creo que estas conferencias son más exhaustivas y comprensibles que MIT OCW

    => Omita los primeros 3 videos de la serie (ya ha cubierto todo lo que se enseñó durante la fase 1)

    => Al completar la Fase 2, ya has cubierto todos los temas básicos de DS con teoría y tienes una buena cantidad de experiencia práctica en codificación

    FASE 2.5 :: OPCIONAL Ravindra Babu Ravula

    -> Echa un vistazo a sus conferencias para el aprendizaje orientado GATE. Son un buen suplemento.


    FASE 3 :: TEORÍA RIGOROSA Y CODIFICACIÓN CONSISTENTE

    PARTE A :: Entrevista

    => Un ★★★★★ programa de preparación para entrevistas con estrellas

    => Adictivo, divertido y, a la vez, prometedor. También podría ser el futuro de la programación de aprendizaje.


    => InterviewBit usa el concepto de Gamificación para fomentar el aprendizaje.

    => La plataforma está interconectada con Facebook, por lo que puede ver el rendimiento de sus amigos e infundir una sensación de competitividad. Incluso puedes seguir a una persona que no está conectada a través de Facebook también.

    => Lo mejor de IB es el concepto de nivel y racha completa. Necesitas alcanzar cierto número de puntos todos los días para mantener una racha, de lo contrario se reduce a la mitad. Y puede pasar al siguiente nivel solo si ha completado lo esencial de ese nivel.


    PARTE B::

    (I) GeeksforGeeks

    => El mejor sitio web para todo tipo de problemas de práctica en DS con una buena explicación y código limpio + completo.

    => Suplemento con GeeksQuiz para mayor práctica => Se puede usar como referencia


    (II) codificador superior

    Competiciones en línea de programación de computadoras en los lenguajes Java, C ++ y C #. Las competiciones se llevan a cabo dos veces por semana, y los miembros pueden ganar de $ 25 a $ 300.

    Tipos de competiciones

    • Algoritmos (duración de la competencia de aproximadamente dos horas): A los competidores se les da un conjunto (generalmente tres) de problemas algorítmicos y tienen 75 minutos para resolver correctamente tantos como puedan.
    • Diseño de software (duración de la competencia de una semana): los competidores reciben un conjunto de requisitos del usuario e intentan convertirlos en una especificación de diseño de software utilizable. Sus esfuerzos se juzgan según una variedad de criterios del “mundo real” sobre la forma correcta y práctica de su diseño.
    • Desarrollo (duración de la competencia de una semana): los competidores reciben un conjunto de especificaciones de diseño e intentan escribir componentes de software que coincidan con esta especificación. Estos componentes son juzgados por su funcionalidad y estilo de codificación.
    • Partidos de maratón (duración de la competición una o dos semanas): los participantes tienen un problema algorítmico particularmente difícil. La puntuación se realiza por computadora en base a criterios específicamente adaptados al problema.
    • Estudio (diseño gráfico): los concursantes deben mostrar sus habilidades creativas en un entorno competitivo.
    • Architecture Assembly TopCoder ha creado concursos de ensamblaje como una extensión de los concursos de diseño y desarrollo de componentes. A través de estas competiciones, los competidores crean aplicaciones de alta calidad utilizando componentes completos y el método competitivo establecido por TopCoder.
    • Pruebas
    • Razas de errores Los equipos, clientes y miembros del Proyecto pueden registrar los errores que encuentran en el software desarrollado y soportado por TopCoder. TopCoder comunicará estos errores a la comunidad miembro. Los errores que están abiertos a la comunidad se publicarán en la página Razas de errores activos.

    (III) Codeforces

    Codeforces proporciona los siguientes servicios principales a todos los usuarios:

    • la participación en los concursos cortos (2 horas), los llamados “Codeforces Rounds”, que se realizan una vez a la semana;
    • participación en concursos educativos (1.5-2.5 horas), realizados 2-4 veces por mes
    • desafiar / hackear soluciones de otros concursantes;
    • capacidad para resolver problemas de concursos anteriores con fines de entrenamiento;
    • “polígono” para crear y probar problemas;
    • Tipo de redes sociales mediante el uso de blogs públicos internos.

    (III) OTROS

    1. Codechef: concurso de programación, concurso de programación, programación de computadoras en línea

    2. SPOJ – Sphere Online Judge (SPOJ)

    3. UVa – Juez en línea de UVa – Inicio

    4. ProjectEuler – Proyecto Euler

    5. Desafíos de programación – Desafíos de programación

    6. ahmed-aly – Concursos virtuales en línea

    7. Juez en línea de TJU – TJU ACM-ICPC

    8. PJU – UNION PANAMERICANA DE JUDO

    9. USACO – Pasarela del programa de capacitación de USACO

    10. TIMUS – Timus Juez en línea

    11. AIZU – Desafío de programación

    12. URI – Juez en línea URI – Iniciar sesión

    13. ZOJ – ZOJ :: Inicio

    14. NTHU – Juez en línea de NTHU

    15. Leetcode – LeetCode

    16. AI Challenge – Inicio | Desafío de IA

    17. Saratov – Universidad Estatal de Saratov :: Participante en línea

    18. Atasco de código de Google – Atasco de código de Google

    19. InterviewStreet – Concursos de programación – Codesprints – Interviewstreet

    20. Kaggle: hacer de la ciencia de datos un deporte.

    21. Herbert – Bienvenido a Herbert Online Judge

    22. CoderCharts – CoderCharts – Social Meets Programming

    23. PKU – Bienvenido a PKU JudgeOnline

    24. CodingBat – CodingBat

    25. Programr – Programr | Aprender.Código.Compartir

    26. HackerRank – Desafíos de la inteligencia artificial :: Problemas y competencias de programación de AI :: HackerRank

    27. Al Zimmermann – Concursos de programación de Al Zimmermann

    28. Light OJ- Página en lightoj.com

    Si las cosas parecen difíciles, entonces comienza desde aquí primero

    => Juez de PEG – 2048


    PARTE C: Creo que esta gran preparación es suficiente para domesticar a la Bestia más enervante del Diablo en una cantidad razonable, es decir.

    Capítulo 1: Puede elegir ignorar el capítulo 1 o hojearlo.

    Capítulo 2: Sólo lectura 2.1 y 2.2.

    Capítulo 3: Si eres principiante, puede que no te guste este capítulo. Entonces, solo lee 3.1. Revisar a través de 3.2

    Capítulo 4: Para el primer temporizador, está bien leer sólo 4.1, 4.3, 4.4 y 4.5 y dejar el resto.

    Capítulo 5: Puedes saltarte esto como un primer temporizador.

    Capítulo 6: Todo es muy importante, lea todas las secciones.

    Capítulo 7: Puede omitir la sección 7.3, pero asegúrese de leer las otras secciones detenidamente

    Capítulo 8 y 9: Puedes dejar estos capítulos al principio.

    Capítulo 10: Todas las secciones de este capítulo son obligatorias y deben leerse.

    Capítulo 11: Puedes saltarte la sección de Hashing perfecto (11.5)

    Capítulo 12 y 13: Por favor, no omita nada en estos capítulos.

    Capítulo 14: Salta esto si eres el primer contador de tiempo.

    Capítulo 15: Le encantará este capítulo. La sección de LCS puede parecer complicada, pero si es posible, intente leer esto dos veces.

    Capítulo 16: Solo lectura 16.2, 16.2 y 16.3

    Capítulo 17: Salta esto por primera vez.

    Capítulo 18, 19, 20 y 21: Omita todos estos capítulos. Capítulo 22: Puede optar por omitir la sección 22.5 (Componentes fuertemente conectados)

    Capítulo 23: Todo en este capítulo es importante y debe leerse la primera vez.

    Capítulo 24 y 25: Estos deben ser leídos

    Capítulo 26: Puedes saltarte esto, no es muy importante para empezar.

    Capítulo 27 en salas: no para empezar, una vez que tenga una buena mano sobre los capítulos hasta aquí, siempre puede elegir qué leer de los capítulos restantes según su interés.

    ==> Pero si vas a un desafío de CUBIERTA A CUBIERTA (es decir, implementar cada algoritmo, entender cada prueba, etc.), estos cuatro caballeros pueden tener piedad de tu alma.


    PARTE D :: Libros de preparación para la entrevista:

    Cracking the Coding Interview :: LA BIBLIA DE LA PREPARACIÓN DE LA ENTREVISTA

    => Este libro le brinda la preparación para la entrevista que necesita para obtener los mejores trabajos de desarrollador de software.

    => Se enfoca en las habilidades de ingeniería de software utilizando 150 preguntas y respuestas para la entrevista de programación, así como otros valiosos consejos.

    => El autor es un ex ingeniero de software y ha trabajado en Google, Microsoft y Apple. También ha estado en el otro lado de la mesa, contratando candidatos para estas compañías principales y, por lo tanto, tiene información valiosa sobre lo que sucede y cómo prepararse para ello.

    => Un sitio web relacionado es CareerCup, que es un foro de discusión donde puede encontrar una variedad de preguntas de varias compañías. Tiene una buena colección de preguntas ya que es antigua (fundada en el año 2005)


    OPCIONAL :: HACER MEJOR USO DE INTERNET

    Puede seguir a algunos programadores, autores e ingenieros de software profesionales conocidos para obtener consejos, consejos, trucos o aprender de su código.

    1) Programadores competitivos: 🙁 Sin ningún orden en particular)

    • Turista (programador competitivo) Gennady Korotkevich
    • Michal Forišek (misof en Topcoder)
    • Bohdan Pryshchenko (I_love_Tanya_Romanova – Codeforces)
    • Michal Danilák (Mimino en Topcoder)
    • Przemysław Dębiak (psyho en Topcoder)
    • Neal Wu (neal_wu en Topcoder)
    • Johnny Ho (codeforces.comrandom.johnnyh – Codeforces)
    • Quora Usuario
    • Mark Gordon (msg555 en Topcoder)
    • Egor Suvorov (yeputons en Topcoder)
    • Brian Bi
    • Anudeep Nekkanti
    • Petr Mitrichev (programador competitivo)
    • ACRush (Tiancheng Lou) CodeChef Usuario | CodeChef
    • Djdolls (Ajay K. Verma) CodeChef Usuario | CodeChef
    • Lalit Kundu
    • Anshuman singh
    • Triveni Mahatha

    2) Desarrolladores profesionales de software ::

    Jon Skeet

    • Él es el maestro de las bibliotecas del tiempo.
    • Él tiene la puntuación más alta de todos los tiempos en StackOverflow.
    • Él es el mismo para la programación que Chuck Norris para combatir el crimen. Más sobre esto aquí: hechos de Jon Skeet
    • Autoridad en C #.
    • > 32000 respuestas StackOverflow
    • Tiene un inmenso respaldo de parte de la comunidad.

    Mariya Mykhailova Desarrollador de software, principalmente interesado en algoritmos y lenguajes de programación.

    Especialidades: SQL, Oracle SQL, C ++, algoritmos, escritura de problemas: http: //www.linkedin.com/in/mari…

    Jonathan Kang

    Jonathan es un diseñador de CPU en Nvidia (dice su perfil, al menos). Brillante con cualquier cosa en el nivel de la arquitectura, realmente aprendo muchas cosas de sus respuestas.

    Anders Kaseorg

    Creo que Anders es lo que podríamos llamar coloquialmente como un genio. Dos cosas de las que tiene mucho conocimiento son Python y matemáticas. Eso no es demasiado sorprendente dados sus logros: tiene una SB en matemáticas del MIT y cofundó una startup (K-Splice) que fue comprada por Oracle. Me gustaría que publicara más sobre cosas a nivel de sistemas (es decir, Linux principalmente). De hecho, me gustaría que publicara más periodo. Actualización : verlo publicar más en C y C ++, que son mis propios idiomas de elección. También olvidé mencionar la última vez que responde muchas preguntas de algoritmos y todas son brillantes. Muy simples, claras explicaciones.

    Robert love

    El hacker de Linux que trabaja para Google, primero en el kernel de Android y ahora en la infraestructura de búsqueda web, también escribió un buen libro sobre el kernel de Linux. Mi única queja sobre Robert es que no publica más en Quora. Actualización : en estos días veo a Robert publicar mucho más y estoy aprendiendo más que nunca. Entre Robert y Anders, realmente obtengo muchas cosas sobre la programación C y el kernel de Linux, y es fantástico.

    Quora Usuario

    Hacer un doctorado en automatización de diseño electrónico, algo de lo que no sé mucho ni conozco a mucha gente que lo haga, pero es un tema muy importante. Sabe mucho sobre arquitectura, buenos consejos sobre el campo y sobre la escuela de posgrado en general. Su actividad es excelente, encuentra cosas que no puedo, así que es un buen negocio.

    Cameron purdy

    Recientemente he seguido a Cameron, pero al observar su actividad pasada, parece muy informativo con respecto a Java, sistemas distribuidos y bases de datos. Trabaja para Oracle, por lo que sus áreas temáticas parecen adecuadas. EDIT: Solo para agregar, él fue un fundador de inicio (Tangosol) y se vendió a Oracle. Gracias Miguel por la distinción en los comentarios.

    Joshua Engel

    Por lo que recuerdo haber leído sobre él, es programador durante el día y casi todo lo demás por la noche, y puedes verlo por su actividad en Quora. De hecho, publiqué un comentario sobre cómo él no publica lo suficiente en el software, pero me indicaron que sí y que no lo había visto en el mismo volumen relativo que otras personas a las que sigo desde que Josh está activo en tantos temas diferentes. Sin embargo, si busca sus respuestas en el software, son de hecho muy perspicaces y claras. También me gustaría agregar que Joshua es una persona divertida a seguir en general, no solo para CS / software.

    Anthony Yeh

    Estudiante de doctorado en Berkeley en el EECS (su lema dice optoelectrónica, así que supongo que EE). Conocedor en áreas generales de computadoras, y algunas áreas más específicas también. También mensajes sobre temas de la escuela de posgrado. Otra persona que me gustaría publicar más. También, creo, un 2012 Quora Top Writer (¡felicidades!).

    Greg Pfister

    Arquitecto de computadoras retirado, solía trabajar en IBM. Escribió un libro llamado In Search Of Clusters y está muy bien informado sobre la arquitectura de todas las computadoras. Ojalá él también publicara más, dada su experiencia en el campo.

    Dan Zhang

    Estudiante de doctorado en ingeniería informática en UT Austin (una de las mejores escuelas de CS, si se lo estuviera preguntando). Una buena persona para seguir en general, y escribe publicaciones en la escuela de posgrado, así como cosas relacionadas con su propio campo. Un poco terso a veces (mi preferencia es respuestas más largas), pero admito que a veces es necesario. Ciertamente, una persona a la que deberías considerar seguir, independientemente de tu preferencia, ya que da algunas respuestas genuinamente buenas.

    Quora Usuario

    Un estudiante de primer año de CS / Mecatrónica en la Universidad de Melbourne con intereses en finanzas, estadísticas y CGI. No responde muchas preguntas, pero la razón principal por la que lo sigo es debido a su junta directiva llamada Hardcore Engineering, donde publica algunas cosas fantásticas sobre software, idiomas y CS en general. Solo algunas cosas realmente, realmente de alta calidad, asegúrate de que las revises.

    Jessica Su

    Ashish Kedia


    3) Si también está interesado en contribuir o aprender de proyectos de código abierto de buena calidad:

    ENLACES DE GITHUB ::

    1) En primer lugar, desarrollar habilidades de programación básicas en cualquier lenguaje de programación 1. Para la programación competitiva, recomendaría comenzar con C y transformar lentamente a C ++.

    2) Comience a practicar códigos simples de sitios como Sphere Online Judge (SPOJ) (los problemas fáciles se pueden filtrar del clasificador de problemas para SPOJ.pl) y Codechef (Concurso de programación) y muchos otros sitios.

    3) Lado a lado, comience a leer los tutoriales de algoritmos de TopCoder. No se frustre si no puede entender a nadie entre ellos. Tal vez, es un nivel un poco más alto que el actual. Cambie a otro tutorial.

    3) Resuelva los problemas en orden decreciente de cantidad de envíos de CA del problema. Poco a poco, verá que pasará de Cakewalk a problemas Ad-hoc a problemas estándar y luego a versiones modificadas de problemas algorítmicos estándar.

    4) NO TE RENUNCIEN SI TE RECIBES RESPUESTAS INCORRECTAS. Este es el punto donde un alto porcentaje de personas pierden interés en la programación. Siga intentando durante un día, incluso una semana, si una voz dentro de su cabeza dice que su método es correcto. Incluso si no puede encontrar otra forma, busque en Google la solución al problema. Lea los diversos enfoques que los codificadores tomaron para resolver el problema. Encuentra dónde te equivocaste. Haz tu propio código y consíguelo. Tenga en cuenta que lea la solución solo si está completamente seguro de que no puede hacer nada que actualmente sepa que pueda obtener su solución de CA.

    5) Después de practicar unos 40-50 problemas, ganarás algo de confianza. Luego puede comenzar a participar en las Competencias de Codificación en línea en Codechef, topcoder, Codeforces, etc.

    Creo que esto debe ser enfatizado nuevamente por su importancia. NUNCA RECIBIR EN Programación. Es difícil volver a empezar de nuevo.

    Los libros más influyentes que todo ingeniero de software necesita leer

    Bueno, aprendí mucho de mis mentores y me di cuenta de que todavía tenía mucho que aprender con los muchos libros diferentes que me sugirieron. Decidí desarrollar una rutina para leer un libro al mes en mi campo profesional (ingeniería de software). A lo largo de los años, he agregado una lista que, en mi opinión, se DEBE LEER para cualquier persona que quiera ser un desarrollador de primer nivel.

    1- Pensamiento y aprendizaje pragmático: refactoriza tu wetware (programadores pragmáticos)

    en Amazon: pensamiento pragmático y aprendizaje: refactorice su wetware (programadores pragmáticos): Andy Hunt: 0852766001452: Amazon.com: Libros

    El desarrollo de software pasa en tu cabeza. No en un editor, IDE, o designtool. Está bien informado sobre cómo trabajar con software y hardware, pero ¿qué pasa con wetware, nuestro propio cerebro? Aprender nuevas habilidades y nuevas tecnologías es fundamental para tu carrera y todo está en tu cabeza.

    En este libro de Andy Hunt, aprenderá cómo se conectan nuestros cerebros y cómo aprovechar la arquitectura de su cerebro. Aprenderá nuevos trucos y consejos para aprender más, más rápido y conservar más de lo que aprende.

    Necesita un enfoque pragmático para pensar y aprender. Necesitas Refactorizar tu Wetware.

    2-El programador pragmático: de Journeyman a Master

    at amazon: El programador pragmático: de Journeyman a Master: 0785342616224: Computer Science Books @ Amazon.com

    – Ward Cunningham Directamente desde las trincheras de programación, el programador pragmático recorta la especialización y los aspectos técnicos más avanzados del desarrollo de software moderno para examinar el proceso central: tomar un requisito y producir un código de trabajo que se pueda mantener y que deleite a sus usuarios. Cubre temas que van desde la responsabilidad personal y el desarrollo profesional hasta técnicas de arquitectura para mantener su código flexible y fácil de adaptar y reutilizar. Lee este libro, y aprenderás cómo * Combatir la podredumbre del software; * Evita la trampa de duplicar el conocimiento; * Escribir código flexible, dinámico y adaptable; * Evitar la programación por coincidencia; * A prueba de balas de su código con contratos, aserciones y excepciones; * Captura de requerimientos reales; * Prueba despiadadamente y con eficacia; * Deleite a sus usuarios; * Construir equipos de programadores pragmáticos; y * Haz tus desarrollos más precisos con la automatización. Escrito como una serie de secciones autocontenidas y lleno de anécdotas entretenidas, ejemplos reflexivos e interesantes analogías, el Programador Pragmático ilustra las mejores prácticas y los principales escollos de muchos aspectos diferentes del desarrollo de software.

    3-Elementos de Programación

    en amazon: Amazon.com: Elementos de programación (0785342635379): Alexander A. Stepanov, Paul McJones: Libros

    “Pregúntele a un ingeniero mecánico, estructural o eléctrico qué tan lejos llegarían sin depender mucho de una base matemática firme, y le dirán, ‘no muy lejos’. Sin embargo, los llamados ingenieros de software a menudo practican su arte con poca o ninguna idea de los fundamentos matemáticos de lo que están haciendo. Y luego nos preguntamos por qué el software es conocido por ser entregado tarde y lleno de errores, mientras que otros ingenieros entregan rutinariamente puentes terminados, automóviles, aparatos eléctricos, etc., a tiempo y con solo defectos menores. Este libro se propone corregir este desequilibrio. Los miembros de mi equipo de desarrollo avanzado en Adobe que tomaron el curso basado en el mismo material se beneficiaron enormemente del tiempo invertido. Puede aparecer como un texto altamente técnico destinado solo a científicos informáticos, pero debería ser una lectura obligatoria para todos los ingenieros de software en ejercicio “.
    —Martin Newell, compañero de Adobe

    “El libro contiene algunos de los códigos más hermosos que he visto”.
    —Bjarne Stroustrup, Diseñador de C ++

    “Estoy feliz de ver el contenido del curso de Alex, el desarrollo y la enseñanza que apoyé fuertemente como el CTO de Silicon Graphics, ahora disponible para todos los programadores en este elegante y pequeño libro”.
    —Forest Baskett, Socio General, Nuevos Asociados Empresariales

    4- Análisis y diseño orientado a objetos de Head First

    at amazon: Head First Análisis y diseño orientados a objetos: Brett D. McLaughlin, Gary Pollice, Dave West: 0636920008675: Amazon.com: Libros

    El análisis y diseño orientado a objetos de Head First es un aspecto refrescante del tema de OOAD. Lo que distingue a este libro es su enfoque en el aprendizaje. Los autores han hecho que el contenido de OOAD sea accesible y utilizable para el profesional”.
    –Ivar Jacobson, Ivar Jacobson Consulting

    “¡Acabo de terminar de leer HF OOA & D y me encantó! ¡Lo que más me gustó de este libro fue su enfoque en por qué hacemos OOA & D-para escribir un gran software!”
    –Kyle Brown, ingeniero distinguido, IBM

    “Escondido detrás de las imágenes divertidas y las fuentes locas se encuentra una presentación seria, inteligente y extremadamente bien elaborada de Análisis y diseño OO. Mientras leía el libro, sentí que estaba mirando por encima del hombro de un diseñador experto que me estaba explicando ¿Qué temas fueron importantes en cada paso y por qué? ”
    –Edward Sciore, Profesor Asociado, Departamento de Ciencias de la Computación, Boston College

    ¿Cansado de leer libros de análisis y diseño orientados a objetos que solo tienen sentido después de que eres un experto? Usted ha escuchado que OOA & D puede ayudarlo a escribir un excelente software cada vez que lo hace feliz a su jefe, a sus clientes satisfechos y le da más tiempo para hacer lo que lo hace feliz. ¿Pero cómo?
    El análisis y diseño orientado a objetos de Head First le muestra cómo analizar, diseñar y escribir software serio orientado a objetos: software que es fácil de reutilizar, mantener y extender; software que no hace daño a tu cabeza; Software que te permite agregar nuevas características sin romper las antiguas. En su interior aprenderá a:

    • Use los principios de OO como encapsulación y delegación para construir aplicaciones que sean flexibles
    • Aplique el Principio Abierto-Cerrado (OCP) y el Principio de Responsabilidad Única (SRP) para promover la reutilización de su código
    • Aproveche el poder de los patrones de diseño para resolver sus problemas de manera más eficiente
    • Use UML, casos de uso y diagramas para asegurarse de que todas las partes interesadas se estén comunicando claramente para ayudarlo a entregar el software adecuado que satisfaga las necesidades de todos.

    5- Programando Perlas (2da Edición)

    at amazon: Programming Pearls (2ª edición): Jon Bentley: 0785342657883: Amazon.com: Libros

    La primera edición de Programming Pearls fue uno de los libros más influyentes que leí al principio de mi carrera, y muchas de las ideas que encontré por primera vez en ese libro se quedaron conmigo mucho después de haberlo leído. Jon ha hecho un trabajo maravilloso al actualizar el material. Estoy muy impresionado de lo nuevos que parecen los nuevos ejemplos. – Steve McConnell Cuando los programadores enumeran sus libros favoritos, la colección de perlas de programación de Jon Bentley se incluye comúnmente entre los clásicos. Así como las perlas naturales crecen a partir de granos de arena que irritan las ostras, las perlas de programación han crecido a partir de problemas reales que han irritado a los programadores reales. Con orígenes que van más allá de la ingeniería sólida, en el ámbito de la comprensión y la creatividad, las perlas de Bentley ofrecen soluciones únicas e inteligentes a esos problemas persistentes. Ilustrado por programas diseñados tanto para la diversión como para la instrucción, el libro está lleno de descripciones lúcidas e ingeniosas de técnicas de programación prácticas y principios de diseño fundamentales. No es en absoluto sorprendente que Programming Pearls haya sido tan valorado por los programadores en todos los niveles de experiencia.

    6- El arte de la programación informática.

    at amazon: El arte de la programación de computadoras, volúmenes 1-4A Conjunto en caja: 8580001170602: Libros de informática en Amazon.com

    Innumerables lectores han hablado sobre la profunda influencia personal del trabajo de Knuth. Los científicos se han maravillado con la belleza y la elegancia de su análisis, mientras que los programadores ordinarios han aplicado con éxito las soluciones de “libro de cocina” a sus problemas cotidianos. Todos han admirado a Knuth por la amplitud, claridad, precisión y buen humor que se encuentran en sus libros.

    ¡No puedo empezar a decirles cuántas horas placenteras de estudio y recreación me han brindado! Los he estudiado detenidamente en automóviles, restaurantes, en el trabajo, en casa … e incluso en un juego de las Pequeñas Ligas cuando mi hijo no estaba en la alineación.

    Charles Long

    Escrito principalmente como referencia, a algunas personas les ha parecido posible e interesante leer cada volumen de principio a fin. Un programador en China incluso comparó la experiencia con la lectura de un poema.

    Si crees que eres un muy buen programador … lee [El Arte de la Programación de Computadoras de [Knuth] … Definitivamente deberías enviarme un currículum si puedes leerlo todo.

    Bill Gates

    7- La Colección de Código Limpio Robert C. Martin

    en Amazon: La Colección de Código Limpio de Robert C. Martin (Colección) (Serie Robert C. Martin) 1, Robert C. Martin, libro electrónico – Amazon.com

    La colección de códigos limpios de Robert C. Martin consta de dos libros electrónicos más vendidos:

    • Código limpio: Un manual de artesanía de software ágil
    • The Clean Coder: un código de conducta para programadores profesionales

    En Clean Code , el legendario experto en software Robert C. Martin se ha unido a sus colegas de Object Mentor para destilar su mejor práctica ágil de limpiar el código “sobre la marcha” en un libro que inculcará en usted los valores de un experto en software y creará Eres un mejor programador, pero solo si trabajas en ello. Se te desafiará a pensar qué tiene de correcto ese código y qué tiene de malo. Más importante aún, será desafiado a reevaluar sus valores profesionales y su compromiso con su oficio.

    Voy a mantener esto corto y simple.
    Esta es la estrategia que estoy usando para aumentar mis habilidades y ha funcionado hasta ahora.
    En primer lugar, trate de conocer su nivel de codificación actual porque tendrá que resolver las cuestiones que le parezcan un poco difíciles, para aumentar su habilidad tendrá que salir de su zona de confort.
    El sitio web de codificación más famoso es TopCoder, por lo que te lo digo según su formato de preguntas.
    Primero intente resolver 250 pt ques (div 2), si puede superar los 240 puntos, continúe con las siguientes si no, luego siga practicando 250 pt ques (div 2) de los SRM anteriores hasta obtener más de 240 pts. cuando pueda alcanzar> 240 pts, pase a 500 pt ques (div 2) y luego haga lo mismo, siga practicando hasta que obtenga> 470 pts.
    La dureza de las preguntas en TopCoder es:
    250 pt (div2) <500 pt (div2) <250 pt (div1) <1000 pt (div2) <500 pt (div1) <1000 pt (div1)

    250 pt (div2) y 500 pt (div2) son preguntas que generalmente no tienen implementación de algoritmo.
    Las preguntas de 250 puntos (div 1) y superiores requieren diferentes tipos de algoritmos y estructuras de datos para ser implementados,
    cuando no pueda resolver una pregunta o no pueda averiguar qué se debe hacer, lea el editorial, sepa qué algoritmo fue necesario para resolver las preguntas, aprenda ese algoritmo resolviendo diferentes preguntas que usen ese algoritmo (según yo) http://www.spoj.com es el mejor sitio web para resolver problemas algorítmicos específicos y problemas específicos de estructura de datos)

    TopCoder tiene un tipo de preguntas un poco diferente a CodeForces, resuelve las Rondas de CodeForces anteriores siguiendo este método.

    No hace falta decirlo, pero obviamente necesitarás practicar MUCHOS problemas para aumentar tu habilidad.

    Entiendo tu situación. He estado donde estás y solía sentir exactamente lo mismo. Cosas que aprendí de mi experiencia:

    1. Paciencia

    Las preguntas en los sitios siempre son complicadas y tendemos a modelar nuestra solución en función de los casos de prueba que se nos presentan, lo que nos hace perder a menudo casos difíciles o difíciles de detectar. Pensando con paciencia, leer la pregunta para asegurarse de que no me haya perdido algo importante puede ayudar.

    2. practica
    Cuanto más codifiques, más podrás conocer para abordar diferentes tipos de problemas.

    3. Soluciones de lectura.
    Después de pasar horas y horas y finalmente no poder descifrarlo, prefiero ver las soluciones enviadas y luego codificar la solución entendida (aprendí esto de Quora)

    Aquí hay una lista de preguntas que me parecieron muy útiles:

    ¿Cómo debo practicar para estar en un nivel en el que pueda abordar los problemas Div1-500 de TopCoder con confianza? Soy un novato con cero experiencia en programación competitiva.

    ¿Cuáles son los 10 algoritmos que uno debe saber para resolver la mayoría de los problemas de algoritmos?

    ¿Cuáles fueron los indicadores que Ajay Somani le dio a Nikhil Garg con respecto a la preparación para el CIPC?

    La respuesta de Nikhil Garg a ¿Cómo debo practicar para estar en un nivel en el que pueda abordar los problemas Div1-500 de TopCoder con confianza? Soy un novato con cero experiencia en programación competitiva.

    ¿Qué se necesita para convertirse en un buen especialista en algoritmos como los mejores clasificados en Topcoder / Spoj / GCJ?

    y si encuentra que habrá muchas más preguntas con respuestas similares que pueden ayudarlo igual que a mí.
    Buena suerte

    Cuando hablamos de principiantes, sugeriría que la mejor idea es practicar mucho en problemas relativamente fáciles (por supuesto, muchos de ellos aún serán un gran desafío para ti al principio) en modo de entrenamiento, algo así como las viejas rondas div2 CF y TC SRM encaja bien aquí; Si está al principio, tal vez necesite tareas aún más fáciles: hay muchos concursos fáciles en sitios como Hackerearth y Codechef, pero la mayoría de ellos no tienen buenos editoriales.

    Y buenas editoriales es parte clave aquí. Incluso si conoce una solución para una tarea, busque las soluciones de otros participantes y también la editorial. Si eres principiante, a menudo sucede que tu solución es fea o demasiado complicada. También puede suceder que en realidad no entiendas por qué funciona tu solución.

    La mayoría de los problemas fáciles son estándar y bien conocidos; Si le pregunta a un participante principal cómo resolver una tarea en particular, probablemente le dará una idea en pocos segundos, y eso no es solo porque esa persona tiene la habilidad suficiente, sino también porque en la mayoría de los casos ya vio la misma tarea o una similar. . Al principio, debes tratar de captar la mayor cantidad de trucos / ideas / soluciones posibles; incluso cuando resolvió alguna tarea en solo 10-15 minutos: lea acerca de otras soluciones posibles, busque la solución más rápida, busque la solución más corta, mire algunas soluciones fallidas para tener una idea de los posibles errores / errores; tal vez no sea la forma de entrenar tu creatividad, pero la mayoría de las tareas estándar no necesitan creatividad de todos modos. Y también construirá una buena base en la que se basará su futura mejora. Debe conocer las rutinas básicas, ya que muchas de las tareas más difíciles se pueden descomponer en una combinación de algunos problemas más fáciles. Si algún día después se enfrentará a una situación como la tengo, este problema tiene una fácil transformación para cubrir el gráfico bipartito con ciclos … Espere … No sé cómo encontrar esta cobertura … ya sabe, será una historia triste. Si eres inteligente y creativo, tienes una buena habilidad general, tal vez tomará un poco de tiempo entender la idea por ti mismo, pero de todos modos, un tipo con oh, vi este problema en el entrenamiento hace dos meses, lo hará aún más rápido.

    Puede resolver los problemas en el conjunto de problemas uno por uno, pero los concursos / entrenamientos virtuales parecen ser una mejor idea para mí. La experiencia competitiva siempre es útil, y también es más fácil concentrarse por completo en el trabajo durante un concurso: ve un temporizador que dice que tiene que intentarlo hasta que finalice el concurso (o hasta que haya resuelto todo, ya veces es incluso mejor motivación) y mientras la mayoría de las personas resuelven los archivos en OJ pueden distraerse fácilmente leyendo noticias o viendo videos lindos de YouTube, pensando que tomaré un descanso y terminaré este problema un poco más tarde, no hay necesidad de apurarse . Esto lleva a una baja productividad: a veces crees que te entrenaste toda la noche, pero en realidad escribiste solo unas pocas líneas de código y pasaste pocas horas charlando, leyendo noticias, viendo videos, haciendo cosas urgentes.

    Absolutamente. La programación competitiva es como ir al gimnasio por tu cerebro: ayuda a ejercer la función cognitiva (y es simplemente divertido =)). Puede comenzar con la programación competitiva en línea. Comience por aprender la sintaxis de un lenguaje de programación (preferiblemente C ++ o Java para programación competitiva). Luego, aprender acerca de las estructuras de datos. Pero con toda honestidad, la mejor manera es comenzar de una manera fácil y seguir avanzando. Roma no fue conquistada en un día. Los pequeños éxitos te darán la motivación adecuada para seguir adelante. De lo contrario, podría parecer imposible.

    Recomiendo comenzar con sitios fáciles como:

    • Codewars.com
    • Coderbyte
    • CodingBat

    Una vez que sea bueno con ellos, puede comenzar a aprender sobre algoritmos como la búsqueda, la clasificación, la búsqueda de rutas, etc. La manipulación de cadenas también es útil. (Los tutoriales de Data Science a continuación son excelentes para cosas más avanzadas).

    De todos modos, una vez que te sientas seguro con las cosas para principiantes, puedes probar suerte en las Grandes Ligas:

    • codificador superior
    • CodeChef
    • codeforces.com

    Y si necesitas algunos tutoriales:

    • Tutoriales de ciencia de datos
    • Tutoriales | CodeChef

    Con todo, la programación competitiva es una manera fantástica de mantener sus habilidades de resolución de problemas agudas. Si tienes alguna otra pregunta, no dudes en preguntarme.

    ¡La mejor de las suertes! =)

    Definición

    La programación competitiva es un deporte mental que generalmente se realiza a través de Internet e involucra a los participantes que intentan programar de acuerdo con las especificaciones proporcionadas. Una competencia de programación generalmente implica que el anfitrión, que presenta un conjunto de problemas lógicos o matemáticos, a los concursantes se les exige que escriban programas de computadora capaces de resolver cada problema.


    Requisito previo

    Antes de saltar al mundo de la programación competitiva, debe tener alguna experiencia en cualquier lenguaje de programación. Algunos de los lenguajes más utilizados en la programación competitiva son:

    • C ++
    • Java
    • Pitón

    Estadísticas de lenguaje utilizadas en CodeForces en 2015

    Si quieres aprender alguno de estos lenguajes, prueba C ++ Programming Language , Java Tutorial o Learn Python the Hard Way.


    Los temas

    La lista completa de Temas se puede encontrar aquí o aquí. Básicamente estarás cubriendo:

    • Estructuras de datos elementales como pila, colas, cadenas, montón, mapa, etc.
    • Estructuras de datos avanzadas como árbol indexado binario, árbol de segmentos, intentos, búsqueda de unión, etc.
    • Técnicas de búsqueda como la búsqueda binaria, la búsqueda ternaria, etc.
    • Técnicas de clasificación como la ordenación rápida, la ordenación por fusión, la ordenación por conteo, etc.
    • Algoritmos de gráficos como BFS, DFS, Clasificación topológica, MST, Algoritmos de flujo de red, etc.
    • Algoritmos de programación dinámica como LCS, LIS, Subset Sum, etc.
    • Matemáticas que incluyen Teoría de números, Combinatoria, Algoritmos geométricos, etc.

    Plataformas

    Algunas plataformas para practicar programación competitiva son:

    TopCoder

    CodeForces

    CodeChef

    HackerRank

    HackerEarth

    Juez de Esfera Online (SPOJ)


    Recursos

    • Una lista impresionante para la programación competitiva! – Codeforces
    • GeeksforGeeks | Un portal informático para geeks.
    • Code Monk – Sé un mejor programador
    • LeetCode
    • Máximo
    • https://discuss.codechef.com/que
    • Visualización de estructuras de datos y algoritmos a través de la animación.

    Blogs

    • Algorithms Weekly por Petr Mitrichev
    • ¡Algoritmos en vivo!
    • El blog de anudeep
    • Blog de Fushar

    Videos


    Libros

    • Introducción a los algoritmos – Wikipedia
    • El arte de la programación informática
    • Estructuras de datos y algoritmos simplificados

    Cursos online

    • Introducción a los algoritmos.
    • Algoritmos, Parte I | Coursera
    • Algoritmos | Coursera
    • Estructuras de datos y algoritmos | Coursera
    • Fundamentos de Estructuras de Datos
    • CS 97SI: Introducción a los Concursos de Programación

    Estrategias

    Algunas de las estrategias seguidas por los programadores competitivos son:

    • Resolviendo al menos 200 problemas más resueltos en SPOJ , seguidos por 200 problemas en Codechef & Codeforces y finalmente compitiendo en los SRM de Top Coder (nuevamente al menos 200)
    • Practicando dominios en A2OJ o HackerRank. Una vez que se domine un dominio, diríjase a concursos en Codeforces o Topcoder.
    • Resolviendo problemas Div 2 250 en TopCoder seguido de problemas Div2 500 luego Div2 1000, luego Div1 500 finalmente Div1 1000.
    • Primero domine todos los dominios en InterviewBit o HackerEarth, luego salte a la arena del Concurso en cualquier Juez en línea.

    Asesoramiento personal

    Cualquiera que sea su estrategia, si puede seguir esto, logrará su objetivo:

    • Fíjese metas pequeñas para lograr Bigger One.
    • Sigue los buenos recursos
    • Mantenerse motivado
    • Sigue practicando
    • Sigue compartiendo tus conocimientos.

    Motivación

    Encuentra una inspiración para mantenerte motivado! a la larga. Ashish Kedia, Anudeep Nekkanti y Anshuman Singh son mis inspiraciones.


    Mejor desempeño

    Algunos de los mejores intérpretes internacionales son:

    • Gennady Korotkevich
    • Petr Mitrichev
    • Adam D’Angelo
    • Bohdan Pryshchenko
    • Tiancheng Lou
    • Anta

    Algunos de los mejores artistas indios son:

    • Anudeep Nekkanti
    • Ashish Kedia
    • Rajat De
    • Sumeet Varma

    Historias impresionantes

    • Artículos destacados de TopCoder
    • ¿Cómo se convirtió Anudeep Nekkanti en tan bueno en programación competitiva?
    • Lo no contado
    • Sesión de preguntas y respuestas con Sumeet Varma
    • Programador del mes para agosto del ’10: Gennady Korotkevich

    Quiero leer más

    • La referencia completa a la Programación Competitiva.
    • ¿Cómo prepararse para ACM – ICPC? – GeeksforGeeks
    • ¿Cómo prepararse para una programación competitiva? – Andrei Margeloiu – Medio

    Codificación feliz <(^ _ ^)>