GCJ08_RoyPalacios
-
Upload
ovruni -
Category
Technology
-
view
651 -
download
0
description
Transcript of GCJ08_RoyPalacios
Google Code Jam 2008
code.google.com/codejam
code.google.com/codejam
Competencia de programación
?
Competencia de programación
!entrada salidaPROGRAM
A
Competencia de programación
entrada salidaPROGRAM
A
Se envía durante el concurso
Se descarga durante
el concurso
Lenguajes de programación
Se puede usar cualquier lenguaje de programación:
- C/C++- Java- C#- VB- Python- Pascal...
Lo importante es poder generar la salida.
Temas incluidos
Implementación directa PROGRAMACIÓN
Algorítmos en grafosProgramación dinámica ALGORÍTMOSGeometría computacional
Teoría de númerosMatemática combinatoriaMATEMÁTICASProbabilidad y estadística
Fases del concurso
Fase Número de participantesQualification Round Ilimitado
Online Round 1 Un problema resuelto
Online Round 2 2520
Online Round 3 1000
Onsite Locals 500
Onsite Finals 100
Fechas clave
Fase Fecha y hora (GMT/UTC -5)Qualification Round Miercoles 16 de julio 6:00 pm
Online Round 1 Viernes 25 al jueves 31 de julioOnline Round 2 Sabado 2 de agosto 11:00amOnline Round 3 Sabado 9 de agosto 11:00am
Onsite Locals Lunes 29 de septiembre
Onsite Finals Viernes 14 de noviembre
Premios
Puesto Premio ($)
1 10000
2 5000
3 2500
4-10 1500
11-30 1000
31-50 750
51-75 500
76-100 250
1-500 Viaje
code.google.com/codejam
4 Problemas
A = (x1, y1)B = (x2, y2)C = (x3, y3)
•ABC es triangulo A, B y C son no colineales•A, B y C son colineales AB.ACort = 0•ABC es triangulo (x2-x1, y2-y1).(y3-y1, x3-x1) = 0
•d1, d2 <= d3 cuadrados de los lados de ABC
•ABC es isosceles d1 = d2 v d2 = d3 v d3 = d1
13.ABC es recto d1 + d2 = d314.ABC es acutangulo d1 + d2 > d315.ABC es obtusangulo d1 + d2 < d3
Editor Dev-C++
Problema
• Se tiene una malla rectangular con f filas y c columnas, se efectua la siguiente operación k veces:- Seleccionar una casilla al azar, A- Seleccionar una casilla al azar, B- Colorear las casillas del rectángulo delimitado por A y B
• Calcular el valor esperado para el número de casillas coloreadas luego de las k operaciones
0<=f, c<=1000 0<=k<=100
Problema
Cada casilla es seleccionada al azar, con distribucion uniforme, y cada seleccion es independiente de las anteriores.
En la figura, f = 5, c = 7, k = 3Un conjunto posible de selecciones:(0,1); (3,2)(3,6); (4,0)(0,6); (0,5)
Problema
Cada casilla es seleccionada al azar, con distribucion uniforme, y cada seleccion es independiente de las anteriores.
En la figura, f = 5, c = 7, k = 3Un conjunto posible de selecciones:(0,1); (3,2)(3,6); (4,0)(0,6); (0,5)
Solución
i
j
Pij
Pij -> probabilidad de que la casilla (i, j) esté coloreada luego de 1 operación
Solución
i
j
Pij -> probabilidad de que la casilla (i, j) esté coloreada luego de 1 operación
Pij
1 - Pij
Pij
1 - Pij
Pij
1 - Pij
Pij
1 - Pij
K=1K=2
K=3
k=4
Luego de k operaciones: No pintado - > (1 - Pij )k
Pintado - > 1 - (1 - Pij )k
1
K=0
….
E = Sumatoria( 1 - (1 - Pij )k )
Solución
i
j
1 - Pij -> probabilidad de que la casilla (i, j) no esté coloreada luego de 1 operación
# total de formas : (fc) 2
# formas de seleccionar 2 casillas que no contengan a la (i, j):
i2.c2 + (f-i-1) 2.c2 + j2.f2 + (c-j-1) 2.f2
- i2.j2 – i2.(c-j-1) 2 – j2.(f-i-1) 2 – (f-i-1) 2.(c-j-1) 2
1 – Pij = # formas de seleccionar 2 casillas que no contengan a la (i, j) # total de formas de seleccionar 2 casillas
0
0
100 000 000 -> 1 segundo
1
2
34
1
2
34
56
X = Min A = F(puntos disponibles)
n = 3 -> devolver arean < 3 -> devolver infinitoPara cada uno de los n^3 triangulos: -> Area + F(puntos disponibles – 1 punto) -> Area + F(puntos disponibles – 2 puntos) -> Area + F(puntos disponibles – 3 puntos) -> actualizar minimodevolver minimo
-> F(puntos disponibles)Puntos disponibles -> cadena de 0 y 1 de tamaño n
-> 2^n combinaciones
Complejidad exponencial : 2^n * n^3
F(puntos disponibles)
K numeros: 0 <= n0, n1, n2 … , nk-1 <= max
Se puede obtener N como suma de algunos de los numeros, utilizandolos maximo 1 vez cada uno?
F(S, i) -> Sumar S con numeros del ni al nk-1 (Si/No) -> 2 opciones, usar/no usar ni -> Se usa ni:
si F(S – ni, i+1) devolver Si -> No se usa:
si F(S, i+1) devolver Si -> devolver No
Complejidad (k*max)*(k)
Caso general: Complejidad Exponencial n*(2^n) Probando todos los subconjuntos