Bootcamp CP-UPV - Capítulo 0

Introducción a la programación competitiva, instalación de software y recomendaciones generales

Queremos darte la bienvenida al Bootcamp CP-UPV. Este curso está diseñado para aquellos que aspiran competir en las competiciones más prestigiosas del mundo, como la ICPC y todas sus regionales; aprender las habilidades necesarias para realizar entrevistas de trabajo; o simplemente obtener una excelente base de programación para desarrollar proyectos personales.

Durante el curso aprenderás poco a poco desde lo más básico hasta temas más complicados como son programación dinámica, grafos y algoritmos que podrás practicar escribiendo tus propios programas a los problemas que te iremos proponiendo cada capítulo junto con todos los participantes del bootcamp.

Si en cualquier momento del curso tienes problemas para configurar algo, entender algún tema o tienes alguna duda no dudes en contactarnos por email o WhatsApp; estamos para ayudar.

Contenidos

¿Qué es la programación competitiva?

La programación competitiva es un deporte mental que te permite resolver problemas usando código. Como en el ajedrez o una olimpiada matemática hay estrategia, pensamiento lógico y resolución de problemas. Esto no es lo mismo que desarrollar software pero las habilidades que se obtienen con la programación competitiva vendrán muy bien en todos los campos relacionados con la programación.

A menudo en el bootcamp se hará referencia a las competiciones de programación. Básicamente son como una olimpiada informática pero más divertida, porque hay que resolver problemas lo más rápido posible y siempre hay un ranking visible para saber quien va ganando, el que tenga resueltos más problemas gana. Con este bootcamp vas a poder participar en ellas.

¿Qué se aprende en este bootcamp y cómo funciona?

El bootcamp está estructurado en capítulos. Cada uno cubre unos conceptos cada vez más complicados y se asume que el participante nunca ha tenido nada que ver con la programación. Es la oportunidad perfecta para introducirse en la programación y ganar una buena base que se puede utilizar para posteriormente aprender cualquier tecnología como puede ser desarrollo web, de aplicaciones o juegos. También será de mucha ayuda para las asignaturas que tengan que ver con programación y para algunos este bootcamp les ayudará a encontrar un trabajo como desarrollador. Este primer capítulo, el 0, no cubre temario de programación, solo es una guía para instalar programas y saber cómo empezar.

Los capítulos desde el 1 hasta el 4 son conceptos básicos de programación que deberían de ser relativamente fáciles de entender para todo el mundo. Los conceptos son los mismos que se podrían aprender de Scratch pero tendrás la oportunidad de ponerlos a prueba en programas reales.

A partir del capítulo 5 se empieza a complicar ya que se muestran los primeros algoritmos que tienen algo de enjundia. En el 6 los programas dejan de ser fáciles de seguir a simple vista porque hay saltos en el código. Y en el 7 se aprenderán estructuras de datos, que básicamente son formas de almacenar información para nuestro programa de la forma que mejor nos convenga.

Los capítulos del 8 hasta el 10 son los más difíciles del bootcamp pese a no ser los últimos, sobre todo el 10, de programación dinámica, es un salto de nivel importante y no es habitual entenderlo enseguida.

Para terminar, los capítulos del 11 al 13 son más relajados ya que por las fechas en las que se abren esos capítulos muchos participantes estarán ya en clase.

Para cada capítulo se abrirá un concurso online en cpupv.contest.codeforces.com para practicar lo aprendido.

Es imprescindible seguir los capítulos en orden ya que es necesario entender los conceptos anteriores para entender los de un nuevo capítulo. Se puede consultar el temario de cada capítulo en detalle aquí

Importante: El Bootcamp se puede realizar en C, C++, Java y Python aunque el principal que usaremos en las explicaciones será C++ ya que es simple y fácil de aprender, tiene implementadas muchas estructuras de datos, es un lenguaje eficiente en ejecución en comparación a Java y Python y generalmente es el que se usa en competiciones de programación. Al final los conceptos son los mismos en todos, lo único que cambia es la sintaxis. Haremos menciones de Java y Python también pero quizás hará falta hacer un poco de investigación por cuenta propia.

Editores de texto para programar

Recomendamos utilizar CP-Editor, un programa para escribir, compilar, ejecutar y comprobar código en un sitio. (Aunque si ya tienes más experiencia quizás te interese esta guia desactualizada: Instalación de VSCode y C++/Java/Python en Linux/Windows/MacOS)

Tutorial: Instalar CP Editor con C++/Java/Python en Windows

Este tutorial está pensado para principiantes que quieren usar CP Editor en Windows con C++, Java y Python.

1. Descargar CP Editor

Link a la página de descargas: aquí. Existen dos versiones principales:

2. Instalación de los lenguajes

C++ (GCC)
  1. Si descargaste la versión portable con GCC, ya tienes g++.exe en la carpeta mingw64/bin.
  2. Para que Windows pueda encontrarlo desde cualquier sitio, añade esa carpeta al PATH:
    • Abre Panel de Control → Sistema → Configuración avanzada del sistema → Variables de entorno.
    • En Path, pulsa Editar y añade: C:\ruta\cpeditor\mingw64\bin
  3. Verifica la instalación abriendo CMD y ejecutando:
    g++ --version
    Debe mostrar la versión de GCC.
Java (JDK)
  1. Descarga el JDK desde la página oficial de Oracle:

    👉 https://www.oracle.com/java/technologies/downloads/ (elige la versión Windows x64 Installer).

  2. Durante la instalación, asegúrate de recordar la carpeta donde se instala (ej. C:\Program Files\Java\jdk-21).
  3. Añade al PATH la carpeta bin del JDK: C:\Program Files\Java\jdk-21\bin
  4. Verifica en CMD:
    java -version
    javac -version
    Deben mostrar la versión instalada.
Python
  1. Descarga Python desde la página oficial:

    👉 https://www.python.org/downloads/

  2. Durante la instalación, marca la opción "Add Python to PATH" antes de pulsar Install Now.
  3. Verifica en CMD:
    python --version

3. Configuración en CP Editor

En Preferences → Languages:
C++
Java
Python

4. Probar la instalación

C++
#include <bits/stdc++.h>
using namespace std;
int main() {
    cout << "Hola desde C++!" << endl;
}
Java
public class Main {
    public static void main(String[] args) {
        System.out.println("Hola desde Java!");
    }
}
Python
print("Hola desde Python!")

Si todo funciona, ¡ya tienes CP Editor listo para C++/Java/Python en Windows!

Cómo usar el Juez Online

Mostraremos ahora cómo usar el juez online, aunque es bastante intuitivo.

Primero iniciaremos sesión con las credenciales que habréis recibido por email, usuario y contraseña.

Group domain login Codeforces contests view

Al entrar aparecerá una página con los concursos por venir. En el momento de la activación de cada uno, se podrá acceder al contest apretando el botón que pone 'Enter >>'

Codeforces enter contest

Y una vez dentro, veremos una tabla con los problemas

Codeforces contest

Podemos ver mucha información sobre el contest pero nos centraremos en lo básico, por ejemplo hemos resuelto el problema A y B, por la caja del avión de papel que sale en verde, y hemos obtenido un resultado erróneo en el problema C, porque la caja está roja. Por supuesto podemos seguir intentando resolver el problema aunque la anterior entrega sea fallida. También podemos ver que 30 personas han resuelto correctamente el problema A, 3 personas han resuelto correctamente el problema I, y nadie ha resuelto aún el problema G. Por último debajo de la tabla con los problemas aparece una tabla donde se muestran clarificaciones a vuestras dudas sobre los problemas y avisos por parte de los organizadores (a veces se produce algún cambio en un problema).

En la ventana 'Submit Code' podemos subir soluciones, aunque se suelen subir desde el propio problema, luego lo veremos. Hay que seleccionar el problema y el lenguaje para nuestro caso, y ahora hay 2 opciones, subir un archivo o copiar y pegar el código al editor. Ahora apretaremos en 'Submit'.

Codeforces submit code Codeforces submissions

Y nos llevará a 'My Submissions' donde podemos ver el veredicto de nuestras soluciones en el contest. Estos son los veredictos más comunes:

Los problemas se pueden hacer en cualquier orden, no hay que comprometerse a ninguno, aunque no tengamos Accepted.

Luego en la ventana de 'Status' podemos ver como van las entregas de otros concursantes.

Codeforces status

En la ventana 'Custom Invocation' podemos probar nuestro código con nuestro propio input antes de subir nuestra respuesta, pero es preferible compilar y probar en nuestro ordenador.

Codeforces custom invocation

Y finalmente podemos ver el ranking en la ventana 'Standings', que tendrá más color una vez empiece el primero concurso:

Codeforces standings

Solo queda mostrar un problema:

Codeforces problem

En orden, vemos:

En la derecha podemos ver una sección 'Submit?' para subir soluciones directamente desde el problema.

Plantillas, terminal y ánimos

Esta sección está pensada para volver a ella más adelante en el curso, no se os espera que entendais esto al comenzar.

Plantillas

Con el tiempo irás creando una plantilla, es un archivo que copiarás y pegarás para cada problema con el objetivo de ahorrar tiempo y no escribir el mismo código cada vez. Está preparada para ponerse a escribir cualquier solución y así tener algo de ventaja sobre otros concursantes que quizás no usen una, en una competición cada minuto cuenta. Aquí hay un ejemplo de una plantilla simple en C++ que tampoco es necesario entender por ahora:

// Importar librería con utilidades
#include <bits/stdc++.h>
// Para especificar por ejemplo que 'cout' pertenece a la librería estándar
using namespace std;

// Las typedef sirven para poder referirse a un tipo de variable con otro nombre (uno más corto por conveniencia)
typedef long long ll;
typedef unsigned long long ull;

// Las macros sirven para referirse a una expresión con un nombre más corto, hay algunos ejemplos más abajo
#define entf          cout << endl
#define ent           cout << "\n"
#define REP(i, a, b)  for (int i = a; i < b; ++i)
#define REPV(i, a, b) for (int i = a; i >= b; --i)
#define MOD           1000000007

#define TESTCASES false

// Resolver el caso de prueba 'tt'
void solve(int tt) {
    
}

int main() {
    // Hace más eficiente la entrada de datos
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    // TESTCASES al ser una macro se sustituye por false al compilarse.  Útil cuando el problema nos pide que procesemos multiples casos de prueba
    if (TESTCASES) {
        int tt; cin >> tt;
        // Esta macro se sustituirá por 'for (int i = 1; i < tt+1; ++i)'
        REP(i, 1, tt+1) {
            solve(i);
        }
    } else solve(1);
    
    return 0;
}

¡¡Ánimo!!

¡Lo más importante es no abandonar! Es probable que te sientas atascado en algún momento. Pregunta a la comunidad y si sigues atascado es mejor que pidas una pista a los organizadores.

¡Pásalo bien y aprovecha al máximo el bootcamp!