Es imposible responder a esta pregunta, porque C ++ es un lenguaje muy complejo y puede aprender todas las características de C ++ en gran profundidad y aún no entenderlo completamente. Sin embargo, sabría más que suficiente C ++ para el IOI.
En lugar de tratar de hacer que la gente en Internet le brinde una lista de características del lenguaje, creo que lo que debe hacer es tomar un libro de C ++ (ver mi perfil) y trabajarlo, para que conozca todos los conceptos básicos, como cómo definir clases, cómo usar punteros y referencias, cómo invocar std::sort
y cosas así. Una vez que haya hecho eso, simplemente comience a hacer las páginas de capacitación de USACO. Cada vez que termine un problema, puede ver las soluciones de muestra que figuran en el análisis. En su mayoría deberías entenderlos, porque ya sabrás lo básico; puedes aprender fragmentos desconocidos del idioma a medida que avanzas.
Durante mucho tiempo, no estaba al tanto de std::queue
, por lo que implementaría BFS de una manera muy ineficiente: usaría un vector para almacenar una lista de nodos que representan un nivel del árbol BFS, luego para cada nodo en ese vector, agregaría sus vecinos no visitados a un nuevo vector, construyendo el siguiente nivel del árbol; luego repetiría hasta que no hubiera más nodos para visitar. Esto era terriblemente poco elegante e ineficiente. Pero finalmente vi un código que usaba std::queue
y me di cuenta de que era la forma “correcta” de implementar BFS.
- ¿Puede alguien ayudarme a preparar un plan para preparar estructuras de datos y algoritmos en un mes de tiempo desde el punto de vista de las entrevistas?
- ¿Qué es mejor para la programación competitiva, la introducción del MIT a los algoritmos o los tutoriales de TopCoder?
- ¿Podemos resolver este problema SPOJ.com - Problema PT07Z de esta manera?
- ¿Es posible proporcionar un análisis de complejidad para todos los algoritmos en términos de theta?
- ¿Cuál es la diferencia básica entre loop y recursividad en C?