Desafíos “Ryckeboer”
Inspirado en los Desafíos “Dal Lago”, llegan los Desafíos “Ryckeboer” , cuyo nombre hace referencia al honorable miembro del jurado, Hugo Ryckeboer, quien sin duda es uno de los grandes responsables de que a lo largo de todos estos años los problemas presentados en la Olimpíada sean tanto desafiantes como interesantes.
Estos desafíos están pensados para los usuarios más experimentados del foro y aunque su dificultad irá variando, deberían ser considerablemente más difíciles que los desafíos “Dal Lago”.
Motivado por el problema planteado a la hora de presentar el uso de Sets en C++
Dados N números enteros y un número adicional X, ver si hay dos números que juntos sumen X.
Inaugura como primer problema en la serie de Desafíos a venir, la siguiente “variante” del problema anterior…
Desafío “Ryckeboer” #1:
Dado un conjunto \mathcal{A} de n números enteros, y un número arbitrario x fijo, decidir si existen tres números en el conjunto dado que sumen x.
Ejemplo:
Si el conjunto dado es \Large \mathcal{A} =\left \{6,1,3,5,4 \right \}, y se toma \Large x = 8, entonces la respuesta es positiva. Pues podemos escribir a 8 como 8 = 1+3+4, todos ellos elementos del conjunto. Por otro lado, si tomamos \Large x = 4, la respuesta es negativa, pues ningún subconjunto de 3 elementos suma 4 (aunque 4 sea un elemento de \mathcal{A} y 4 = 1+3)
Complejidad esperada: \mathcal{O}(n^2)
Pista
Resolver el problema de 2SUM (el problema motivador) en \mathcal{O}(n) si los números del conjunto están en un arreglo ordenado. Y luego usarlo como subrutina para resolver 3SUM (el problema del desafío) en \mathcal{O}(n^2).
Aclaraciones
- La idea es proponer posibles soluciones y discutirlas.
- No hace falta poner “código”. Alcanza con la idea del algoritmo.