Programación competitiva

18
RODOLFO MERCADO GONZALES ( Rmg_91 ) PROGRAMACIÓN COMPETITIVA

Transcript of Programación competitiva

Page 1: Programación competitiva

RODOLFO MERCADO GONZALES

( Rmg_91 )

PROGRAMACIÓN COMPETITIVA

Page 2: Programación competitiva

Consiste en dar soluciones eficientes a un conjunto de

problemas algorítmicos en un determinado tiempo y a través de

un programa hecho en algún lenguaje de programación

permitido ( C, C++, Java, etc ).

¿ Programación competitiva?

Page 3: Programación competitiva

¿ Qué temas debo saber?

Es recomendable poseer una

base de lógica y matemática, el

grado de éxito dependerá

mucho de esto.

Page 4: Programación competitiva

¿ Qué temas debo aprender?

Teoría de Números.

Recursividad.

Programación Dinámica.

Algoritmos de Búsqueda.

Grafos.

Redes de Flujo.

Geometría Computacional.

Teoría de Juegos.

Page 5: Programación competitiva

¿ Cómo son los problemas?

Enunciados en la mayoría de casos en inglés, en el cuál se

cuenta el problema, se define que vendrá en el archivo de

entrada y cuál será el resultado esperado en el archivo de

salida.

ARCHIVO

ENTRADA

ALGORITMO

/ CÓDIGO ARCHIVO

DE SALIDA

Page 6: Programación competitiva

Ejercicio básico Dado un entero n, imprimir el resultado de la suma de todos

los enteros desde 1 hasta n.

Restricciones: n <= 10^8

Entrada

3

100

Salida

6

5050

Page 7: Programación competitiva

¿ Solución 1 ?

int n, i, total;

int main(){

cin >>n;

total=0;

for(i=1; i<=n; i++){

total+=i;

}

cout << total << endl;

}

VAR

i , n , total : enteros

INICIO

leer( n )

total 0

desde i 1 hasta n

total total + i

fin_desde

escribir( total)

FIN

Page 8: Programación competitiva

long long n;

int main(){

long long n;

cin>>n;

cout << n*(n+1)/2 << endl;

}

¿ Solución 2 ? VAR

n : entero

INICIO

leer( n )

escribir( n*( n+1) /2 )

FIN

Page 9: Programación competitiva

AC ( accepted ) – Tu programa esta bien :D

WA ( wrong answer) – Tu programa da una respuesta

incorrecta.

TLE ( time limit exceeded ) – Tu programa tarda mucho

tiempo.

¿Mi solución es correcta?

De acuerdo a nuestra solución

brindada para un problema, se nos

asignará una calificación, como

por ejemplo:

Page 10: Programación competitiva

¿ La participación es en equipos?

Existen competencias donde la participación es individual y

también otras en la que la participación es en equipos de

hasta máximo 3 personas.

Page 11: Programación competitiva

Concursos Individuales

Page 12: Programación competitiva

Concursos en Equipos

Page 13: Programación competitiva

ACM - ICPC

El ACM ICPC es una competición anual de programación

entre universidades de todo el mundo patrocinada por IBM.

(Equipos de 3 integrantes y 1 coach).

Consta de 2 fases:

- Regional (Argentina , Perú , Bolivia, Chile, Uruguay y

Paraguay )

- World Final ( clasificados de las regionales)

Es el evento más grande, prestigioso y antiguo de las competencias de

Programación en el mundo

3 CUPOS!!

Page 14: Programación competitiva

IEEEXTREME

IEEEXtreme es un desafío global en el que equipos de 3

estudiantes miembros IEEE, asesorado y supervisado por un

proctor (miembro IEEE), compiten entre sí en un lapso de 24

horas ininterrumpidas para resolver una serie de problemas de

programación.

Page 15: Programación competitiva

Beneficios de Competir

- Capacitación avanzada en algoritmos.

- Participación en campamentos de programación.

- Empresas como Google , Facebook , Microsoft buscan

programadores con el perfil formado en estas competencias

( pasantías)

- Pueden ganar muchos premios de acuerdo a los concursos

( polos, maletines, dispositivos electrónicos, dinero efectivo,

pasantías, viajes, etc ).

Page 16: Programación competitiva

¿Cómo entrenar?

Estudiar la teoría de libros y artículos en internet

-Introduction to algorithms / Thomas H. Cormen

-Tutoriales de Topcoder, Codeforces y Codechef.

Resolver problemas de Jueces Online( repositorios )

SPOJ, UVA , TJU , TIMUS , PKU, Codechef ,

Codeforces, Topcoder.

Participar en Campamentos de Programación ( UNI,

Arequipa, Argentina, Brasil ).

Page 17: Programación competitiva

¿Cómo saber mi progreso? Participar en concursos individuales semanales , los cuales se dan

online y te permite tener un rating y/o color que representa el

nivel en que estás. Cada uno de estos sitios tiene un ranking.

www.topcoder.com/tc

www.codeforces.com

www.codechef.com

Page 18: Programación competitiva

Good luck and have fun!!!