Los problemas a resolver durante el concurso son siempre aplicaciones de consola, por lo que reciben los datos de ejecución a través de la entrada estándar, y envían los resultados a la salida estándar.
Los problemas se centran principalmente en cuestiones de algoritmia y estructuras de datos. Para poder poner a prueba la corrección de las soluciones de los participantes, la implementación en cuestión debe probarse con muchos casos de entrada; debido a eso, la entrada de los programas es multicaso. Esto significa que si, por ejemplo, el problema consiste en indicar el último dígito del factorial de un número dado, la entrada de ese problema estará compuesta de muchos números ("casos") para que el código de extracción del último dígito se ponga a prueba muchas veces.
Es importante, por lo tanto, que los participantes tengan destreza con la entrada y salida estándar del lenguaje de desarrollo que utilicen. Por ello se aconseja realizar ejercicios utilizando las librerías correspondientes de cada lenguaje. Hay disponible una guía con consejos prácticos sobre cómo enfrentarse a los problemas. También se puede consultar un pequeño manual sobre cómo compilar en línea de comandos.
Las soluciones de los participantes a los problemas no sólo deben ser correctas, sino que deben ejecutarse dentro de unos límites de tiempo razonables. Esto no significa que haya que perseguir la eficiencia de manera extrema (preocupándose, por ejemplo, por usar rotación de bits en lugar de divisiones), pero sí se deben evitar, en la medida de lo posible, implementaciones lentas cuando hay otras similares en dificultad de programación más eficientes en ejecución. Por ejemplo, no suele ser aconsejable usar cadenas para manejar números y sus dígitos si se puede hacer utilizando los tipos numéricos del lenguaje.
En ocasiones, también hay que prestar atención a la complejidad del algoritmo. Aunque éste no es un aspecto que entre oficialmente en los currículos de los ciclos, un buen programador debe ser consciente, al menos intuitivamente, de la diferencia en el tiempo de ejecución de un algoritmo O(n) y uno O(n²). Algunos problemas están planteados persiguiendo que se implemente una solución concreta, y las restricciones de tiempo configuradas en el juez persiguen precisamente impedir que soluciones ineficientes entren en tiempo. En los cuadernillos de los problemas, a veces se avisa de este hecho usando la imagen de un reloj.
Se debe tener en cuenta que las distintas convocatorias tienen características distintas, por lo que la dificultad de los problemas en cada una de ellas también puede diferir. Puedes hacerte una idea mirando el histórico de problemas. En general, podrás comprobar que las convocatorias on line tienen problemas más fáciles que las convocatorias presenciales. Y entre las presenciales, los regionales son ligeramente más sencillos que los nacionales.