¿Qué partes de c ++ se deben conocer para aprender algoritmos para ioi?

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.

Como dijeron los predecesores, nunca hay una línea 100% clara, pero básicamente la respuesta importante es que no es necesario usar una parte del lenguaje orientada a objetos, lo que excluye más porque si uno quiere aprender C ++ en los detalles, entonces objete material orientado es 90% o más. Por supuesto, usar una estructura (/ clase) es muy útil, pero básicamente solo está restringido al uso de tipo C, solo para agrupar variables en un objeto y crear algunos métodos en el objeto, constructores, maaybe copy-constructor una o dos veces, pero yo dudaría (probablemente todo lo que necesita sea autogenerado), pero todo lo que es el núcleo de la orientación a objetos (herencia) no es útil para la competencia de algoritmos, por lo que puede omitir todo esto. Básicamente, solo necesita aprender características similares a C de C ++ (que son muy pocas y probablemente ya lo sepa cuando hace esta pregunta) más STL (principalmente el uso de estructuras de datos STL, pero que aprenderá mientras aprendiendo e implementando algoritmos, es imposible saber lo que querrás recordar antes de comenzar a usarlo, y de todos modos hubieras necesitado aprenderlo de memoria, lo que habría sido inútil), más tal vez si quieres algo de C + Nuevas características de +11 (aunque debo decir que no recuerdo haber usado nada de C ++ 11 en los concursos aparte de las funciones “auto” y lambda más obvias, que son solo una pequeña conveniencia de usar pero nada crucial) .

No hay un límite particular de eso. Debe tener un conocimiento profundo de estructuras de datos y algoritmos. Además, debe saber cómo usar la función STL en C ++. Si eres bueno en los dos puntos anteriores, entonces creo que eres bueno para ir.

More Interesting

¿Es posible hacer un programa algorítmico de intercambio oscilante?

¿Cuáles son los ejemplos de colas en la vida real con algoritmo?

¿Cuáles son algunos algoritmos fáciles de implementar para la localización basada en características o puntos de referencia de robots móviles 2-D?

Dos conjuntos finitos tienen elementos myn cada uno. El número total de subconjuntos del primer conjunto es 56 más que el número total de subconjuntos del segundo conjunto. ¿Cuáles son los valores de myn?

¿Puedo obtener un enlace a algunas buenas preguntas de programación dinámica 3-D?

¿Cuáles son los algoritmos detrás de las simulaciones de partículas en C / C ++?

¿Avanzar en CS en general hará que los algoritmos sean cada vez más complejos con el tiempo que las personas no pueden manejar? ¿Cuáles son las soluciones para ese caso?

¿Cuál es la mejor manera de analizar un currículum en los campos de la base de datos? ¿Qué hacer si tiene muchos currículums y necesita que los datos se extraigan en elementos individuales que se pueden colocar en una base de datos?

¿Cuál es el libro perfecto sobre CPP y algoritmos?

¿Cuál es la diferencia entre el problema del vendedor ambulante y el problema del árbol de expansión mínima?

¿Qué algoritmos utilizan Bing, Ask y DuckDuckGo para mostrar los resultados de búsqueda?

Recientemente llegué a un llamado indicador de opciones binarias del sitio web 'www.investoo.com' que afirma una tasa de éxito del 83% al predecir el resultado de las opciones binarias. ¿Es una estafa?

En la complejidad temporal de un algoritmo, ¿por qué puede considerarse útil que una operación elemental tome "tiempo unitario"?

¿Cómo pueden los estudiantes de electricidad y electrónica llegar a ser buenos en algoritmos y estructuras de datos?

Cómo estimar pi usando un hexágono unitario en Matlab