├── LICENSE ├── Lectures ├── dp.md ├── flow.md ├── graphs.md ├── greedy.md ├── np.md └── strategies.md ├── Problems └── np.md ├── Proyectos ├── 2024.md └── old │ ├── 2023 │ ├── 1 │ │ ├── El Bar.md │ │ ├── El Lab.md │ │ ├── El Zoologico.md │ │ ├── Josués y Karels balanceados.md │ │ ├── La Pelota.md │ │ ├── Los Espias.md │ │ ├── Manager Mauro.md │ │ ├── MineCraft.md │ │ ├── Presupuesto de la FEU.md │ │ ├── Procrastinación++.md │ │ ├── Profe Leandro.md │ │ ├── Sheyla, Lázaro y la libreta de chismes.md │ │ ├── Tito el tramposo.md │ │ └── ¿Jenga?.md │ ├── 2 │ │ ├── El triángulo.pdf │ │ ├── El viaje.pdf │ │ ├── La extraña aventura de Darío.pdf │ │ ├── Lázaro presidente del PCC.pdf │ │ ├── Problema en la pizarra.pdf │ │ ├── Sin imaginación.pdf │ │ ├── Tito el corrupto.pdf │ │ ├── el_triángulo.md │ │ ├── el_viaje.md │ │ ├── la_extraña_aventura_de_darío.md │ │ ├── lázaro_presidente_del_pcc.md │ │ ├── problema_en_la_pizarra.md │ │ ├── sin_imaginación.md │ │ ├── tito_el_corrupto.md │ │ ├── ¿Y si empezamos el proyecto?.pdf │ │ └── ¿y_si_empezamos_el_proyecto?.md │ ├── 3 │ │ ├── Deborah y los Stacks.md │ │ ├── Kevin el Encargado.md │ │ ├── La extraña aventura de Sheyla.md │ │ ├── La pregunta.md │ │ ├── La venganza de Alejandra.md │ │ ├── Lashi el Popular.md │ │ ├── Raul el Incongruente.md │ │ └── Tito quita y pon.md │ ├── primer_proyecto_distribución.md │ ├── segundo_proyecto_distribución.md │ └── tercer-proyecto-distribución.md │ └── 2024 │ ├── asignación │ ├── Alejandro,María,Leismael.md │ ├── Alejandro,Yisell,Sebastián.md │ ├── Alex,Carlos,Jorge.md │ ├── Alex,Juan,Javier.md │ ├── Alfredo,Leonardo,Anthuan.md │ ├── Ana,Diana,Carlos.md │ ├── Claudia,Roger,Jan.md │ ├── Daniel,Anabel,Enzo.md │ ├── José,Yonatan,David.md │ ├── Lázaro,José,Max.md │ ├── Marco,Yoan,kevin.md │ ├── Maykol,Brian,Davier.md │ ├── Ovidio,Jesús,Juan.md │ └── lidier,eduardo,josé.md │ ├── distribución.md │ ├── first-ex-statements │ ├── BS-Dp-Banco.md │ ├── BS-Dp-Poligono.md │ ├── BS-Minecraft.md │ ├── BS-greedy-Torneo.md │ ├── DP-Dos-contadores.md │ ├── DP-Mex-Subsecuencia.md │ ├── DP-Subsecuencia-buena.md │ ├── DP-Tramposo.md │ ├── DP-clasificar-suspensos.md │ ├── Greedy-Criminal-y-policias.md │ ├── Greedy-Distancias-de-arboles.md │ ├── Greedy-Sufijo-balanceado.md │ └── Greedy-Videojuego.md │ ├── second-ex-statements │ ├── Flow-Corrupción.md │ ├── Flow-El-Triangulo.md │ ├── Flow-El-viaje.md │ ├── Flow-Grid.md │ ├── Graph-Creditos.md │ ├── Graph-Dos-permutaciones.md │ ├── Graph-Gato-y-raton.md │ ├── Graph-Greedy-Distancia-de-árboles.md │ ├── Graph-Pcc.md │ └── Graph-Spaning-trees.md │ └── third-ex-statements │ ├── npc-Cubic subgraph.md │ ├── npc-Dominating Set.md │ ├── npc-Exact Cover.md │ ├── npc-Feedback Arc Set.md │ ├── npc-Graph Isomorphism.md │ ├── npc-Longest Path.md │ ├── npc-Minimum Weight Vertex Cover.md │ ├── npc-Multicolored Clique.md │ └── npc-Set Packing.md └── README.md /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 School of Math and Computer Science, UH 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Lectures/graphs.md: -------------------------------------------------------------------------------- 1 | # Algoritmos de grafos 2 | 3 | ## Nociones elementales 4 | 5 | - Definición de grafo 6 | - Nodo 7 | - Arista 8 | - In-degree, out-degree 9 | - Representaciones computacionales de grafos 10 | - Lista de adyacencia 11 | - Matriz de adyacencia 12 | - Matriz de incidencia 13 | - Grafos dirigidos y no-dirigidos 14 | - Grafos ponderados 15 | - Multigrafos 16 | 17 | ## Algoritmos de búsqueda 18 | 19 | - Búsqueda no informada 20 | - No ponderada 21 | - BFS 22 | - DFS 23 | - Ponderada 24 | - Costo uniforme (Djikstra) 25 | 26 | - Búsqueda informada (los vimos en IA) 27 | - Greedy 28 | - A*, Bidirectional A*, ... 29 | 30 | ## Estructura 31 | 32 | - Orden topológico 33 | En un DAG, obtener un orden donde cada nodo ocurra antes que sus predecesores. 34 | 35 | - Componentes conexas (no-dirigido) y fuertemente conexas (dirigido) 36 | Dividir el grafo en subgrafos donde todos los nodos están conectados. 37 | 38 | ## Minimum spanning tree 39 | 40 | - Definición de árbol abarcador 41 | - Noción de corte, arista de cruce, arista segura 42 | - Algoritmos 43 | - Genérico: encontrar mágicamente una arista segura 44 | - Kruskal: escoger la arista de menor peso que une cualquiera de los árboles MST. 45 | Ordenar las aristas por peso, usar un disjoint-set para encontrar la menor arista que no crea un ciclo 46 | - Prim: escoger la arista de menor peso que añade un nuevo nodo al MST 47 | Usar un heap para escoger el nodo más cercano al corte 48 | 49 | ## Shortest paths 50 | 51 | - Tipos de problemas 52 | - Single-source single-destination 53 | - Single-source multiple-destination 54 | - All-pairs 55 | 56 | - Propiedades 57 | - Subestructura óptima 58 | - Aristas de costo negativo (ciclos de costo negativo) 59 | - Caminos simples 60 | 61 | - Relajación 62 | Si en el camino (s,v) la arista (u,v) permite disminuir el costo de s~v 63 | 64 | - Algoritmos 65 | - Relajación: 66 | - Bellman-Ford: relajar todas las aristas de forma consecutiva N-1 veces 67 | - DAG: relajar los vértices en orden topológico 68 | - Dijsktra: escoger el vértice menor que cruza el corte y relajar todas las artistas 69 | - Floyd-Warshall: resolver dinámicamente el mejor camino i~j con a lo sumo k vértices 70 | -------------------------------------------------------------------------------- /Lectures/greedy.md: -------------------------------------------------------------------------------- 1 | # Greedy Algorithms 2 | 3 | ## 1. Introduction to Greedy Algorithms 4 | 5 | ### 1.1 Definition and Characteristics 6 | - **Definition**: 7 | - A greedy algorithm is an algorithmic paradigm that builds up a solution piece by piece, always choosing the next piece that offers the most immediate benefit (i.e., the locally optimal choice). 8 | 9 | - **Characteristics**: 10 | - **Greedy-choice property**: A globally optimal solution can be arrived at by selecting a local optimum. 11 | - **Optimal substructure**: An optimal solution to the problem contains optimal solutions to subproblems. 12 | 13 | ### 1.2 Comparison with Other Paradigms 14 | - **Dynamic Programming**: 15 | - Dynamic programming is used when the problem can be broken down into overlapping subproblems, and it focuses on solving each subproblem just once and storing the results. 16 | - Contrast with greedy algorithms, which do not consider future consequences of current choices. 17 | 18 | - **Divide-and-Conquer**: 19 | - Divide-and-conquer algorithms divide the problem into smaller subproblems, solve them independently, and combine their solutions. 20 | - Discuss how greedy algorithms typically make decisions without revisiting previous choices. 21 | 22 | ### 1.3 Examples of Greedy Algorithms 23 | - Provide a few real-world examples where greedy algorithms are applicable: 24 | - **Kruskal’s and Prim's Algorithms** for finding the Minimum Spanning Tree. 25 | - **Dijkstra’s Algorithm** for finding the shortest path in a graph. 26 | - **Huffman Coding** for data compression. 27 | 28 | ### 1.4 When to Use Greedy Algorithms 29 | - Discuss scenarios where greedy algorithms are effective: 30 | - Problems with optimal substructure and greedy-choice property. 31 | - Situations where a quick, approximate solution is acceptable. 32 | - Mention common pitfalls where greedy algorithms may fail to produce an optimal solution, such as in problems like the **0/1 Knapsack Problem**, which requires dynamic programming for an optimal solution. 33 | 34 | ## 2. Classic Problems 35 | 36 | ### 2.1 Frog Jumping Problem 37 | - **Problem Statement**: Given a series of stones placed at integer locations, and a maximum jump length, determine the minimum number of jumps need to reach the end. 38 | - **Greedy Approach**: Jump the fartest possible stone that is reachable for the current stone. 39 | 40 | ### 2.2 Activity Selection Problem 41 | - **Problem Statement**: Given a set of activities with start and finish times, select the maximum number of activities that don’t overlap. 42 | - **Greedy Approach**: Explain how sorting activities by finish time leads to an optimal selection strategy. 43 | 44 | ### 2.3 Fractional Knapsack Problem 45 | - **Problem Statement**: Given weights and values of items that can be divided, maximize the total value in a knapsack with a weight limit $K$. 46 | - **Greedy Approach**: 47 | - Calculate the value-to-weight ratio for each item. 48 | - Sort items based on this ratio in descending order. 49 | - Fill the knapsack starting from the item with the highest ratio, allowing for fractional amounts if necessary. 50 | 51 | ### 2.4 Minimize Cash Flow Among Friends 52 | - **Problem Statement**: Given a list of debts among friends, minimize the total cash flow required to settle all debts. 53 | - **Greedy Approach**: Discuss calculating net amounts for each person and settling debts by always addressing the largest creditor and debtor first. 54 | -------------------------------------------------------------------------------- /Lectures/strategies.md: -------------------------------------------------------------------------------- 1 | # Estrategias de Diseño de Algoritmos 2 | 3 | - Constructiva 4 | - Ad-hoc 5 | - Greedy 6 | - Recursiva 7 | - Divide & Conquer 8 | - Backtrack 9 | - Programación dinámica 10 | - Búsqueda 11 | - Exacta 12 | - Exhaustiva 13 | - Binaria 14 | - Hash 15 | - Heurística 16 | - Branch & X 17 | - Path-finding 18 | - Local 19 | - Metaheurística 20 | 21 | Muchos problemas se pueden ver de diferentes formas. 22 | 23 | ## Algoritmos Constructivos 24 | 25 | Donde el problema consiste en dado un input, construir un objeto que cumple con ciertas propiedades, optimizando cierto criterio. 26 | 27 | De manera general la solución se "construye" tomando decisiones, y se quiere obtener la solución óptima con respecto a cierto criterio. 28 | Por lo tanto, hay que tomar las decisiones locales de forma que la solución global sea óptima. 29 | 30 | ### Ad-hoc 31 | 32 | Explotar características propias del problema. 33 | 34 | Ej: Bubble-Sort 35 | 36 | ### Greedy 37 | 38 | Tomar siempre la mejor decisión local, para que sea correcto debe haber subestructura óptima. 39 | 40 | Ej: Cambio de monedas, Djikstra, Linear Scheduling. 41 | 42 | Forma de resolver: 43 | 44 | - Encuentra un formulación recursiva del problema 45 | - Define la decisión greedy 46 | - Demuestra que luego de la decisión greedy, solo hay subproblema que resolver 47 | - Demuestra que la decisión greedy es óptima 48 | - Convierte la formulación recursiva en iterativa 49 | 50 | Para que el greedy funcione hay que demostrar que la mejor solución local es mejor global. 51 | Para ello se escoge una solución óptima, y se demuestra que cambiando una decisión por la decisión local óptima, esta no empeora. 52 | 53 | ### Recursiva 54 | 55 | Dividir el problema en subproblemas, tal que la solución del problema general se construye a partir de las soluciones a los subproblemas. 56 | La solución más general es backtrack. 57 | 58 | #### Backtrack 59 | 60 | Construir de forma exhaustiva todas las posibles soluciones. No hay subestructura óptima. 61 | 62 | #### Divide & Conquer 63 | 64 | Dividir en subproblemas disjuntos. Resolver cada subproblema de forma óptima, y mezclar las soluciones. Debe haber subestructura óptima. 65 | 66 | Ej típico: ordenación (cada subarray debe estar ordenado) 67 | Otro ejemplo: subsecuencia de suma máxima 68 | 69 | #### Programación dinámica 70 | 71 | Dividir en subproblemas no necesariamente disjuntos, pero donde hay subestructura óptima y problemas independientes. 72 | 73 | Ej: Fibonacci y compañia, Matrix-Chain, Cut-Rod. 74 | 75 | Dos formas de resolver: 76 | 77 | - Memoization (top-down): La forma más fácil, se convierte un algoritmo recursivo directamente en dinámico. 78 | - Bottom-up: Requiere ordenar los subproblemas por algún criterio de "tamaño" de forma que todos los problemas dependan solo de problemas "menores". 79 | 80 | El costo dependerá de la cantidad de subproblemas, y del costo de resolver cada subproblema. 81 | 82 | ### Análisis 83 | 84 | #### Cómo saber que hay subestructura óptima? 85 | 86 | - Dividir el problema asumiendo que la solución general es óptima 87 | - Asumir que uno de los subproblemas no tiene la solución óptima 88 | - Cambiar el subproblema por la solución óptima 89 | - Llegar a una contradicción mejorando la solución general 90 | 91 | #### Cómo saber si hay subproblemas independientes? 92 | 93 | - Qué la solución óptima a uno de los subproblemas no implique que la solución óptima a otro subproblema deba cambiar (p.ej. shortest-path vs longest simple path). 94 | 95 | #### Greedy vs Dinámica 96 | 97 | 0-1 Knapsack vs Fraction Knapsack 98 | 99 | ## Algoritmos de búsqueda 100 | 101 | Cuando el problema consiste en encontrar un elemento con ciertas propiedades (o minimizando cierto criterio) en un conjunto de elementos. 102 | 103 | ### Búsqueda exhaustiva 104 | 105 | Analizar todos los elementos. No hay mucho que comentar aquí. 106 | 107 | ### Búsqueda binaria 108 | 109 | Cuando existe algún criterio que permita particionar el espacio de búsqueda en dos subespacios A y B, de forma que se pueda garantizar que solo hay que buscar en A, y |A| es O(|B|). 110 | 111 | Ej: binary search en arrays 112 | 113 | "Demostrar" que no hay solución mejor. 114 | Ver conexión con ordenación. 115 | 116 | ```python 117 | def binary_search(A, n, T): 118 | L = 0 119 | R = n − 1 120 | while L ≤ R 121 | m = floor((L + R) / 2) 122 | if A[m] < T then 123 | L = m + 1 124 | else if A[m] > T then 125 | R = m − 1 126 | else: 127 | return m 128 | return None 129 | ``` 130 | 131 | Solución alternativa: 132 | 133 | ```python 134 | def binary_search_alternative(A, n, T): 135 | L = 0 136 | R = n − 1 137 | while L != R do 138 | m = ceil((L + R) / 2) 139 | if A[m] > T then 140 | R = m − 1 141 | else: 142 | L = m 143 | if A[L] = T then 144 | return L 145 | return None 146 | ``` 147 | 148 | ```python 149 | def binary_search_leftmost(A, n, T): 150 | L := 0 151 | R := n - 1 152 | while L < R: 153 | m := floor((L + R) / 2) 154 | if A[m] < T: 155 | L := m + 1 156 | else: 157 | R := m 158 | return L 159 | ``` 160 | 161 | ```python 162 | def binary_search_rightmost(A, n, T): 163 | L := 0 164 | R := n 165 | while L < R: 166 | m := floor((L + R) / 2) 167 | if A[m] > T: 168 | R := m 169 | else: 170 | L := m + 1 171 | return R - 1 172 | ``` -------------------------------------------------------------------------------- /Problems/np.md: -------------------------------------------------------------------------------- 1 | # Problemas NP, NP-Completo, NP-Hard 2 | 3 | Asumiendo que los siguientes problemas ya se han demostrado como NP-Completos: 4 | 5 | - SAT 6 | - 3-Sat 7 | - Clique 8 | - Conjunto independiente 9 | - Vertex Cover 10 | - Subset Sum 11 | - Mochila 12 | - Hamilton (Dirigido) 13 | - Viajante 14 | 15 | Demuestre que los siguientes problemas son NP-Hard o NP-Completos, según corresponda. 16 | 17 | ### Set cover 18 | 19 | Dado un conjunto $X$ y una colección S de subconjuntos de $X$, el problema consiste en determinar si existe un subcolector $S' \subseteq S$ tal que cada elemento de $X$ aparezca exactamente una vez en los subconjuntos de $S'$. 20 | 21 | ### Clique 22 | 23 | Un clique es un subgrafo completo dentro de un grafo. Formalmente, un clique en un grafo $G=(V,E)$ es un subconjunto de vértices $C \subseteq V$, tal que todos los pares de vértices en $C$ están conectados directamente por una arista. En otras palabras, todos los vértices del clique están mutuamente conectados. 24 | 25 | Hallar el clique de mayor tamaño en un grafo. 26 | 27 | ### Cobertura de Clique 28 | 29 | Dado un grafo $G=(V,E)$, una cobertura de cliques es un conjunto de cliques $\{C_1,C_2,…,C_k\}$ tal que cada arista $(u,v) \in E$ pertenece a al menos uno de estos cliques. 30 | 31 | El objetivo del problema de cobertura de cliques es encontrar el número mínimo de cliques necesarios para cubrir todas las aristas del grafo. 32 | 33 | ### Numero Cromático 34 | 35 | El número cromático de un grafo es el número mínimo de colores necesarios para colorear los vértices del grafo de manera que dos vértices adyacentes no compartan el mismo color. 36 | 37 | Hallar el número cromático en un grafo. 38 | 39 | ### Conjunto Dominante 40 | 41 | En un grafo $G=(V,E)$, un conjunto de vértices $D \subseteq V$ es un conjunto dominante si cada vértice de $V$ que no está en $D$ es adyacente a al menos un vértice en $D$. 42 | 43 | Una partición de los vértices $V$ en $k$ conjuntos $D_1,D_2,…,D_k$​ es una partición domática si cada $D_i$​ (para $i=1,2,…,k$) es un conjunto dominante. El numero dominante es la cardinalidad del menor conjunto dominante de $G$. 44 | 45 | Hallar el numero dominante de $G$. 46 | 47 | ### Número Domatic 48 | 49 | El número de domatic de un grafo $G$, denotado como $domatic(G)$, es el número máximo $k$ tal que los vértices de $G$ pueden dividirse en $k$ conjuntos disjuntos $D_1,D_2,…,D_k$ donde cada $D_i$​ es dominante. 50 | 51 | Hallar el número de Domatic de un grafo. 52 | 53 | ### Ancho de Banda 54 | 55 | Dado un grafo $G=(V,E)$ y una disposición lineal de sus vértices representada como una función $f:V→\{1,2,…,|V|\}$, el ancho de banda de $G$ para esa disposición es: 56 | 57 | $$max⁡\{|f(u)-f(v)| : (u,v) \in E\}$$ 58 | 59 | El problema consiste en encontrar una disposición $f$ que minimice este valor, es decir, reducir al mínimo la distancia máxima en la disposición lineal entre los extremos de las aristas del grafo. 60 | 61 | ### Retroalimentación de Vértices 62 | 63 | Dado un grafo $G=(V,E)$, un conjunto de retroalimentación de vértices es un subconjunto de vértices $F \subseteq V$ tal que al eliminar todos los vértices en $F$ (y sus aristas incidentes), el grafo resultante no contiene ciclos (es un grafo acíclico o un bosque, si es no dirigido). 64 | 65 | El objetivo del problema es encontrar el conjunto de retroalimentación de vértices de tamaño mínimo. 66 | 67 | ### Retroalimentación de Arcos 68 | 69 | Dado un grafo $G=(V,E)$, un conjunto de retroalimentación de arcos es un subconjunto de arcos $F \subseteq E$ tal que al eliminar todos los arcos en $F$, el grafo resultante no contiene ciclos (es un grafo acíclico o un bosque, si es no dirigido). 70 | 71 | El objetivo del problema es encontrar el conjunto de retroalimentación de arcos de tamaño mínimo. 72 | 73 | ### 3D Matching 74 | 75 | El problema se basa en encontrar un emparejamiento dentro de un conjunto tridimensional. 76 | 77 | Supongamos que tienes tres conjuntos disjuntos: $X$, $Y$, y $Z$, cada uno de tamaño $n$. También tienes un conjunto $T$ de ternas de la forma $(x,y,z)$, donde $x \in X$, $y \in Y$, y $z \in Z$. 78 | 79 | El objetivo es determinar si existe un subconjunto de $T$ de tamaño $n$ (es decir, nn ternas) tal que cada elemento de $X$, $Y$, y $Z$ aparezca exactamente una vez en las ternas seleccionadas. 80 | 81 | ### Dimensión Bipartita 82 | 83 | Para un grafo $G=(V,E)$, la dimensión bipartita $b(G)$ es el menor entero $k$ tal que las aristas de $G$ pueden particionarse en k conjuntos $E1,E2,…,Ek$ donde cada subgrafo $Gi=(V,Ei)$ es bipartito. 84 | 85 | Determinar la dimensión bipartita de un grafo cualquiera. 86 | 87 | ### Numero de Intersección 88 | 89 | Sea $G=(V,E)$ un grafo no dirigido con $V$ como el conjunto de vértices y $E$ como el conjunto de aristas. El número de intersección de $G$, denotado como $int(G)$, es el mínimo entre las cardinalidades de una colección de conjuntos $\{S_v​:v \in V\}$, tal que: 90 | 91 | 1. A cada vértice $v \in V$ se le asigna un conjunto $S_v$​. 92 | 2. Existe una arista $(u,v) \in E$ si y solo si $S_u \cap S_v \neq \emptyset$. 93 | 94 | En otras palabras, el número de intersección mide cuántos conjuntos son necesarios para representar todas las relaciones (aristas) entre los vértices mediante intersecciones de conjuntos. 95 | 96 | ### Subgrafo Máximo Bipartito 97 | 98 | El problema consiste en encontrar dado un grafo $G=(V,E)$ el subgrafo $G'=(V',E')$ con $V' \subseteq V$ y $E' \subseteq E$ de forma que $G'$ sea bipartito y $|E'|$ es máximo. 99 | 100 | ### Máximo Corte 101 | 102 | Sea $G=(V,E)$ un grafo con aristas ponderadas. Un corte es una division de los vertices en dos conjuntos $T$ y $V-T$. El costo de un corte es la suma de los pesos de las aristas que van de $T$ a $V-T$. El problema trata de encontrar el corte de mayor costo de un grafo. 103 | -------------------------------------------------------------------------------- /Proyectos/old/2023/1/El Bar.md: -------------------------------------------------------------------------------- 1 | 2 | El Bar 3 | 4 | En un bar se controla la entrada de personas diaria durante una cantidad determinada de días. En lo adelante, la administración del bar se refiere a la cantidad de personas que entran, en relación a la media durante ese período, por ej si un día entran 5 personas más que la media calculada se registra como '5', si entran 10 personas menos que la media ya calculada se registra '-10' (esta media no se actualiza). 5 | 6 | La administración del bar tiene un registro de la asistencia durante n días consecutivos, que ha sido registrada de la forma antes mencionada, y se ha visto que la asistencia al bar en la segunda mitad analizada fue la misma cada día. 7 | 8 | El dueño del bar va a hacerle una auditoría a la administración para saber si todo marcha bien, de la siguiente forma: El administrador le dirá un número k, y el dueño elegirá k días aleatorios de la lista de n días, si el total de personas que ha ido en total en todos esos días es positivo con respecto a la media anterior concluirá que el bar marcha bien, de lo contrario, mal. 9 | 10 | El administrador lo contrata a usted para que lo ayude como científico que se considera..., que k debe elegir el administrador, para que, siempre que sea posible, el dueño del bar le dé el visto bueno? 11 | -------------------------------------------------------------------------------- /Proyectos/old/2023/1/Josués y Karels balanceados.md: -------------------------------------------------------------------------------- 1 | 2 | Josués y Karels balanceados. 3 | 4 | Alejandra está comenzando a quedarse dormida en mitad de un turno de 5 | `**censura**`. La verdad es que ya conoce todo el contenido de la 6 | conferencia, pero no quiere cerrar los ojos y herir los sentimientos del 7 | profesor. Así que, para dejar que su mente se entretenga en algo, 8 | comienza a imaginar clones de Josué y Karel, colocados uno al lado del 9 | otro formando una lista. La imaginación de Alejandra es tan poderosa que 10 | empieza a realizar el siguiente proceso: Primero imagina dos listas 11 | cualesquiera de Josués y Karels. Luego trata de imaginar una tercera 12 | lista tal que las dos primeras son sublistas no necesariamente continuas 13 | de esta y que además esté balanceada. 14 | 15 | Alejandra define una lista de Josués y Karels balanceada como una lista 16 | que cumple lo siguiente: 17 | 18 | - Una lista formada por sólo un josué y un karel, en ese orden, está 19 | balanceada. 20 | 21 | - Si a una lista balanceada, se le agrega un Josué al principio y un 22 | Karel al final, el resultado sigue estando balanceado. 23 | 24 | - La concatenación de dos listas de Josués y Karel balanceadas es 25 | también una lista de Josués y Karel balanceada. 26 | 27 | Ayude a Alejandra (a perder el tiempo) con su proceso. Dadas dos listas 28 | de Josués y Karel cualesquiera, encuentre la menor lista tal que las dos 29 | primeras son sublistas no necesariamente continuas de esta y además está 30 | balanceada. 31 | 32 | -------------------------------------------------------------------------------- /Proyectos/old/2023/1/Los Espias.md: -------------------------------------------------------------------------------- 1 | Los Espías 2 | 3 | Durante la segunda guerra mundial una parte importante de la información era transmitida en cartas encriptadas en buzones públicos que eran depositadas en estos por espias. Funcionaba de la siguiente manera: 4 | - En la ciudad solo había un buzón usado para temas militares que era compartido para todas estas operaciones. 5 | - En un período dos generales hacían cada uno una lista de órdenes: s y t, de tamaños cualesquiera. 6 | - La lista de órdenes de un general era una secuencia de comandos, cada uno podía ser de enviar información o de ir al buzon a recogerla, Ej: 7 | 8 | L1: r,r,e,r 9 | L2: e,e,r 10 | (para r: recoger y e: enviar) 11 | 12 | - Si cuando un espía iba al buzón a recoger información se encontraba varias cartas, solo recogía una. 13 | - Si cuando un espía iba al buzón a recoger información, no encontraba nada, le reportaba al general como un posible caso de información filtrada y se daba la orden de fusilar a todos los implicados. 14 | - Si al finalizar el período quedan cartas en el buzón, un cartero común las lee, y se da un caso de información filtrada y se fusila a todos los implicados también. 15 | 16 | Usted es un mediador de paz, por tanto su tarea es construir una lista de ordenes que contenga las listas de los dos generales, agregando la menor cantidad de ordenes posibles (al principio en el medio o al final), ya sea de enviar o recoger información, de manera que no fusilen a nadie. 17 | 18 | 19 | -------------------------------------------------------------------------------- /Proyectos/old/2023/1/Manager Mauro.md: -------------------------------------------------------------------------------- 1 | 2 | Manager Mauro 3 | 4 | Mauro tiene un espíritu deportivo tan grande, que paralelamente con sus 5 | estudios ha decidido también manejar el equipo de fútbol de su facultad 6 | MATCOM. Dedicar su tiempo a esto no es impedimento (cree él) para seguir 7 | obteniendo buenos resultados académicos. La verdad sea dicha, Mauro no 8 | tiene ni idea de fútbol. De hecho, varias veces se ha preguntado a sí 9 | mismo cómo llegó a esa importante posición. Lo bueno es que sí sabe de 10 | matemática y porgramación, así que decide formar un equipo 11 | (teóricamente) poderoso. Mejor aún, el equipo más (teóricamente) 12 | poderoso posible. 13 | 14 | Se debe formar un equipo de $p$ jugadores en distintas posiciones y $k$ 15 | espectadores VIP (comisión de embullo). La facultad tiene $n$ personas. 16 | Para cada persona $i$ se conoce su valor $a_i$ como espectador VIP y su 17 | valor $p{ij}$ como jugador en la posición $j$. 18 | 19 | Ayude a Mauro haciendo un algoritmo que calcule el poder (valor) del 20 | mejor equipo posible. Un equipo es mejor que otro si tiene más valor. 21 | 22 | -------------------------------------------------------------------------------- /Proyectos/old/2023/1/MineCraft.md: -------------------------------------------------------------------------------- 1 | MineCraft 2 | 3 | En el juego de MineCraft una de las principales distracciones es la construccion, los mejores jugadores logran hacer monumentos imponentes que sorprenden a todos. Actualmente se esta llevando a cabo un torneo de construcción en el juego, donde la tarea es hacer un muro. Un muro es, como sabemos, una ilera de columnas de bloques de piedra, todos de la misma altura. En MineCraft, para llevar a cabo esta tarea hay 3 movimientos válidos: 4 | 5 | - sacar un bloque de piedra del inventario y aumentar la altura de la columna en cuestion en 1 de altura 6 | - destruir un bloque de piedra de una columna y disminuir la altura de la columna en cuestion en 1 de altura 7 | - mover un bloque de piedra de una columna a otra, aumentando la altura de la 2da columna y disminuyendo la de la 1ra en 1 de altura cada una. 8 | 9 | Se sabe que hacer cada movimiento consume c, d y m de energia respectivamente, y que en los inventarios de los jugadores hay suficienues bloques de piedra siempre. Los jugadores comienzan a jugar con un muro a medio hacer aleatorio, osea, se les da una cantidad n de columnas de bloques de piedra en ilera, de disímiles tamaños y el ganador del torneo será el que construya un muro de largo n utilizando la menor cantidad de energia, no se permite crear columnas nuevas ni dejar huecos de antiguas columnas en el muro porsupuesto. 10 | 11 | Elabore una estrategia que asegure que para cualquier muro inicial a medio hacer con que comience, usted logrará hacer el muro pedido utilizando la menor cantidad de energia posible. 12 | 13 | -------------------------------------------------------------------------------- /Proyectos/old/2023/1/Presupuesto de la FEU.md: -------------------------------------------------------------------------------- 1 | 2 | Presupuesto de la FEU 3 | 4 | Deborah es la nueva secretaria de la FEU de MATCOM y una de sus nuevas 5 | tareas consiste en hacer un reporte de las ganancias y gastos de los 6 | últimos meses. Para cada mes tiene un número entero. Un número positivo 7 | significaría que sobró dinero, ese mes, mientras que uno negativo indica 8 | que se perdió dinero. El decano quiere saber la suma de ganancias o 9 | gastos de algunos meses consecutivos, pero con el apuro no dijo cuántos 10 | meses consecutivos ni a partir de qué mes. Por supuesto, Deborah, en un 11 | acto de agilidad mental (no corrupción), decide encontrar las secuencias 12 | de $k$ meses consecutivos en los que el balance de dinero sea positivo. 13 | 14 | Deborah lleva $n$ meses como secretaria y esos son los meses de los que 15 | es responsable. A partir del mes $\frac{n}{2}$, fue que logró 16 | acostumbrarse al trabajo nuevo y por tanto, a partir del mes siguiente a 17 | ese, el reporte de gasto o ganancia se mantuvo constante (siempre fue el 18 | mismo). 19 | 20 | Ayude a Deborah con un algoritmo que encuentre un $K$ tal que 21 | todas las secuencias de meses de tamaño $k$ posibles, tengan balance 22 | positivo. 23 | 24 | -------------------------------------------------------------------------------- /Proyectos/old/2023/1/Procrastinación++.md: -------------------------------------------------------------------------------- 1 | 2 | Procrastinación++ 3 | 4 | Roxana y Leonardo no tienen ganas de estudiar, luego de mirar al techo 5 | unos 20 minutos deciden que es hora de seguir procrastinando y proceden 6 | a entretenerse con un juego. Leonardo le da a Roxana dos strings $T$ y 7 | $S$. A partir de $S$, Roxana comienza a formar un nuevo string $A$ con 8 | las siguientes operaciones (una a la vez): 9 | 10 | - Elimina el primer caracter de $S$ y lo inserta al principio de $A$. 11 | 12 | - Elimina el primer caracter de $S$ y lo inserta al final de $A$. 13 | 14 | EL objetivo del (divertidísimo) juego es encontrar la cantidad de 15 | cadenas $A$ posibles a armar, de manera que $T$ sea prefijo de $A$. Tras 16 | 30 min de armar cadenas a lo loco, Roxana decide que es tiempo de crear 17 | un algoritmo que resuelva el juego por ella. Encuentre ese algoritmo. 18 | 19 | -------------------------------------------------------------------------------- /Proyectos/old/2023/1/Profe Leandro.md: -------------------------------------------------------------------------------- 1 | 2 | Profe Leandro 3 | 4 | Leandro es profesor de programación. En sus ratos libres, le gusta 5 | divertirse con las estadísticas de sus pobres estudaintes reporbados. 6 | Los estudiantes están separados en $n$ grupos. Casualmente este año, 7 | todos los estudaintes reporbaron alguno de los dos exámenes finales $P$ 8 | (POO) y $R$ (Recursividad). 9 | 10 | Esta tarde, Leandro decide entretenerse separando a los estudiantes 11 | suspensos en conjuntos de tamaño $k$ que cumplan lo siguiente: En un 12 | mismo conjunto, todos los estudiantes son del mismo grupo $i$ 13 | ($1 <= i <= n$) o suspendieron por el mismo exámen $P$ o $R$. 14 | 15 | Conociendo el grupo y prueba suspensa de cada estudiante y el tamaño de 16 | los conjuntos, ayude a Leandro a saber cuántos conjuntos de estudiantes 17 | suspensos puede formar. 18 | 19 | -------------------------------------------------------------------------------- /Proyectos/old/2023/1/Sheyla, Lázaro y la libreta de chismes.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | Sheyla, Lázaro y la libreta de chismes. 4 | 5 | A Sheyla le gusta el chisme. De hecho, le gusta a tal punto que tiene 6 | una libreta con todos los secretos de su aula de los que se ha ido 7 | enterando con el paso de los años. Los chismes da la libreta están 8 | ordenados por tiempo de descubrimiento y separados en 8 categorías 9 | distintas (vergonzoso, para enorgullecerse, amoroso, etc). 10 | 11 | Por otro lado, las vueltas de la vida han llevado a Lázaro a volverse 12 | presidente del aula y, para mantener su poder, ha decidido que 13 | resultaría conveniente conocer secretos de sus compañeros (quéin sabe, 14 | pueden resultar útiles) y le ha pedido ayuda a Sheyla. Sin embargo, 15 | Lázaro es un poco raro y también ha decidido que no necesita todos los 16 | secretos de la libreta, sino un subconjunto de estos que cumpla con las 17 | siguientes condiciones: 18 | 19 | Sea $A$ una cadena con enteros entre 1 y 8. Cada índice representa un 20 | chisme de la libreta (en el mismo orden en que aparece) y cada valor 21 | representa el tipo de chisme asociado a este. Además, la cadena $S$ 22 | representa el subconjunto que Lázaro quiere conocer. 23 | 24 | - Para cada par de tipos de chismes $t_1$, $t_2$ distintos, La 25 | cantidad de chismes de tipo $t_1$ en $S$ puede diferir de la 26 | cantidad de chismes de tipo $t_2$ en no más de 1 elemento. 27 | 28 | - Si un chisme de tipo $t$ aparece en $S$, todos los chismes de tipo 29 | $t$ de $S$ deben formar un segmento continuo. Estos chismes no son 30 | necesariamente continuos en la cadena $A$. 31 | 32 | Para ayudar a Lázaro y Sheyla, reciba la cadena $A$ representando a la 33 | libreta, y calcule el tamaño de la mayor cadena $S$ posible. 34 | 35 | -------------------------------------------------------------------------------- /Proyectos/old/2023/1/Tito el tramposo.md: -------------------------------------------------------------------------------- 1 | 2 | Tito el tramposo 3 | 4 | Tito está pasando un curso de Diseño y Análisis de Algoritmos. Este año, 5 | por primera vez en la historia, los profesores han decidido evaluar el 6 | curso mediante un examen final y Tito se ha dado cuenta de que, a 7 | grandes rasgos, está frito. A pesar de ser un poco barco, es de hecho un 8 | muchacho inteligente y rápidamente se da cuenta que su única forma de 9 | aprobar era hacer trampa. El día de la prueba, Tito se sentó en el 10 | asiento que estaba entre Hansel y Elena para fijarse, con la esperanza 11 | de que, uniendo las preguntas respondidas por cada uno, se pudiera 12 | formar un examen correcto. 13 | 14 | El examen tiene $n$ preguntas, ordenadas en la hoja. Elena y Hansel 15 | pueden no ser capaces de responder cada uno el examen entero, pero todas 16 | las preguntas que responden, están correctas. Se conoce cuáles preguntas 17 | respondió cada uno y se reciben como dos listas ordenadas de enteros 18 | entre 1 y $n$. Tito tiene $p$ oportunidades para mirar hacia la 19 | izquierda (hoja de Hansel) o hacia la derecha (Hoja de Elena) y su 20 | agilidad mental le alcanza para ver las respuestas de $k$ preguntas 21 | consecutivas (en cualquier posición) cada vez que echa una mirada a un 22 | examen. 23 | 24 | Ayude a Tito a saber la cantidad máxima de preguntas que puede responder 25 | con su (tramposa) estrategia. 26 | 27 | -------------------------------------------------------------------------------- /Proyectos/old/2023/1/¿Jenga?.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ¿Jenga? 4 | 5 | A Marcos le compraron un Jenga por navidad. Jenga es un juego que 6 | consiste en armar una torre con palitos, para luego ir retirándolos uno 7 | a uno hasta que la torre se desmorone. Marcos no sabe esto. De hecho 8 | Marcos no tiene ni idea de qué hacer con el reguero de palitos que tiene 9 | sobre la mesa. Como todo un programador, decide utilizar los palitos 10 | para un juego que, según él, es más divertido que Jenga, fueran cuales 11 | fueran sus reglas. 12 | 13 | Primero coloca algunos palitos de manera que se formen $n$ columnas. 14 | Cada columna $i$ tiene inicialmente tamaño $h_i$. Entonces se pueden 15 | realizar tres acciones distintas, con distintos costos que se definen al 16 | inicio del juego: 17 | 18 | - Coloca un palito sobre una columna aumentando en 1 su tamaño (costo 19 | $C$) 20 | 21 | - Eliminar el palito más arriba de una columna disminuyendo en 1 su 22 | tamaño (costo $E$) 23 | 24 | - Mover el palito más arriba de una columna a la posición más arriba 25 | de otra columna ($M$) 26 | 27 | El objetivo del juego es lograr que todas las columnas tengan la misma 28 | altura, utilizando acciones que sumen el menor costo posible. Encuentre 29 | un algoritmo que reciba una lista de tamaño $n$ con las $h_i$ alturas 30 | iniciales junto con los enteros $C$, $E$ y $M$ de los distintos costos y 31 | calcule el costo de la secuecncia de acciones más eficiente. -------------------------------------------------------------------------------- /Proyectos/old/2023/2/El triángulo.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/matcom/algos/aaacb78bd8c1ec930f7d2845324c3c90ecdd0934/Proyectos/old/2023/2/El triángulo.pdf -------------------------------------------------------------------------------- /Proyectos/old/2023/2/El viaje.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/matcom/algos/aaacb78bd8c1ec930f7d2845324c3c90ecdd0934/Proyectos/old/2023/2/El viaje.pdf -------------------------------------------------------------------------------- /Proyectos/old/2023/2/La extraña aventura de Darío.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/matcom/algos/aaacb78bd8c1ec930f7d2845324c3c90ecdd0934/Proyectos/old/2023/2/La extraña aventura de Darío.pdf -------------------------------------------------------------------------------- /Proyectos/old/2023/2/Lázaro presidente del PCC.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/matcom/algos/aaacb78bd8c1ec930f7d2845324c3c90ecdd0934/Proyectos/old/2023/2/Lázaro presidente del PCC.pdf -------------------------------------------------------------------------------- /Proyectos/old/2023/2/Problema en la pizarra.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/matcom/algos/aaacb78bd8c1ec930f7d2845324c3c90ecdd0934/Proyectos/old/2023/2/Problema en la pizarra.pdf -------------------------------------------------------------------------------- /Proyectos/old/2023/2/Sin imaginación.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/matcom/algos/aaacb78bd8c1ec930f7d2845324c3c90ecdd0934/Proyectos/old/2023/2/Sin imaginación.pdf -------------------------------------------------------------------------------- /Proyectos/old/2023/2/Tito el corrupto.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/matcom/algos/aaacb78bd8c1ec930f7d2845324c3c90ecdd0934/Proyectos/old/2023/2/Tito el corrupto.pdf -------------------------------------------------------------------------------- /Proyectos/old/2023/2/el_triángulo.md: -------------------------------------------------------------------------------- 1 | 2 | El triángulo 3 | 4 | Javier estaba un día practicando con su instrumento favorito: El 5 | triángulo. El triángulo es un instrumento musical tan espectacular que 6 | sus notas se escriben como números enteros. Este día Javier se propuso 7 | componer una canción de una forma bastante peculiar. Tomó $n$ enteros 8 | (notas) aleatorios y los escribió en una lista $a$. Una melodía válida 9 | es una subsecuencia de $a$ en la que todos sus números adyacentes 10 | cumplen que: 11 | 12 | - Se diferencian en 1. 13 | 14 | - Son congruentes módulo 7. 15 | 16 | La canción de Javier debe contener exactamente 4 melodías que cumplan 17 | con lo anterior y además no intercepten entre sí. Ayude a Javier 18 | encontrando una canción que maximice las notas usadas. 19 | -------------------------------------------------------------------------------- /Proyectos/old/2023/2/el_viaje.md: -------------------------------------------------------------------------------- 1 | 2 | El viaje 3 | 4 | Kenny y Jesús quieren hacer un viaje por carretera de La Habana a 5 | Guantánamo. Objetivo: Fiesta. Obstáculo: Precio de la gasolina. 6 | Incluyendo el punto de salida (habana) y de destino (guantánamo), hay un 7 | total de $n$ puntos a los que es posible visitar, unidos por $m$ 8 | carreteras cuyos costos de gasolina se cononcen. Los compañeros 9 | comienzan entonces a planificar su viaje. 10 | 11 | Luego de pensar por unas horas, Kenny va entusiasmado hacia Jesús y le 12 | entrega una hoja. En esta hoja se encontraban $q$ tuplas de la forma 13 | $(u, v, l)$ y le explica que a partir de ahora considerarían como útiles 14 | sólo a los caminos entre los puntos $u$ y $v$ cuyo costo de gasolina 15 | fuera menor o igual a l, para $u, v, l$ de alguna de las $q$ tuplas. 16 | 17 | Jesús lo miró por un momento y le dijo: Gracias. La verdad esta 18 | información no era del todo útil para su viaje. Pero para no 19 | desperdiciar las horas de trabajo de Kenny se dispuso a buscar lo que 20 | definió como carreteras útiles. Una carretera útil es aquella que 21 | pertenece a un algún camino útil. Ayude a Kenny y Jesús encontrando el 22 | número total de carreteras útiles. [^1] 23 | 24 | [^1]: Cando le contaron del plan a Sheyla, esta se preguntó extrañada 25 | por qué Kenny y Jesús no habían simplemente buscado el camino de 26 | costo mínimo entre La Habana y Guantánamo. Hay que estudiar más 27 | discreta. 28 | -------------------------------------------------------------------------------- /Proyectos/old/2023/2/la_extraña_aventura_de_darío.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | La extraña aventura de Darío 4 | 5 | Darío estaba comiendo unos champiñones cuando de pronto se quedó 6 | dormido. Al despertar, se dio cuenta de que ya no se encontraba en la 7 | tierra. Estaba en un extraño planeta rodeado de hombrecitos verdes de 8 | abundante cabellera y etremidades cortas. El representante de los 9 | extraterrestres se acercó a Darío y le explicó la situación. 10 | Aparentemente los hombrecillos tenían tecnología lo suficientemente 11 | avanzada para conectar planetas por toda la galaxia con portales de 12 | traslación instantánea, pero nunca se les había dado bien la matemática 13 | discreta (al parecer una pandemia les dificultó el aprendizaje), así que 14 | abdujeron a Darío, estudiante de MATCOM para pedirle ayuda. 15 | 16 | El problema es el siguiente: Tienen $n$ planetas unidos por $m$ 17 | portales. Los portales van en una sola dirección y el costo de 18 | combustible espacial de cada uno ($w_i$) es conocido. Se sabe que sólo 19 | un portal puede conectar dos planetas. Es posible escoger un conjunto de 20 | portales e invertir el sentido de todos al mismo tiempo. El costo de 21 | realizar esa acción está dado por el peso máximo entre todas las 22 | portales que fueron invertidas. Los extraterrestres quieren encontrar 23 | una forma de, a partir de esas inversiones de portales, conseguir que 24 | haya un planeta al que sea posible llegar desde cualquier otro planeta. 25 | Ayude a Darío a encontrar una forma de conseguir esto, con costo mínimo. 26 | -------------------------------------------------------------------------------- /Proyectos/old/2023/2/lázaro_presidente_del_pcc.md: -------------------------------------------------------------------------------- 1 | 2 | Lázaro presidente del PCC 3 | 4 | Han pasado 20 años desde que Lázaro se graduó de Ciencias de la 5 | Computación (haciendo una muy buena tesis) y las vueltas de la vida lo 6 | llevaron a convertirse en el presidente del Partido Comunista de Cuba. 7 | Una de sus muchas responsabilidades consiste en visitar zonas remotas. 8 | En esta ocasión debe visitar una ciudad campestre de Pinar del Río. 9 | 10 | También han pasado 20 años desde que Marié consiguió su título en 11 | MATCOM. Tras años de viaje por las grandes metrópolis del mundo, en 12 | algún punto decidió que prefería vivir una vida tranquila, aislada de la 13 | urbanización, en una tranquila ciudad de Pinar del Río. Las vueltas de 14 | la vida quisieron que precisamente Marié fuera la única iniversitaria 15 | habitando la ciudad que Lázaro se dispone a visitar. 16 | 17 | Los habitantes de la zona entraron en pánico ante la visita de una 18 | figura tan importante y decidieron reparar las calles de la ciudad por 19 | las que transitaría Lázaro. El problema está en que nadie sabía qué ruta 20 | tomaría el presidente y decidieron pedirle ayuda a Marié. 21 | 22 | La ciudad tiene $n$ puntos importantes, unidos entre sí por calles cuyos 23 | tamaños se conoce. Se sabe que Lázaro comenzará en alguno de esos puntos 24 | ($s$) y terminará el viaje en otro ($t$). Los ciudadanos quieren saber, 25 | para cada par $s, t$, cuántas calles participan en algún camino de 26 | distancia mínima entre $s$ y $t$. 27 | -------------------------------------------------------------------------------- /Proyectos/old/2023/2/problema_en_la_pizarra.md: -------------------------------------------------------------------------------- 1 | 2 | Problema en la pizzarra 3 | 4 | Un día iba David por su facultad cuando ve un cuadrado formado por 5 | $n$x$n$ cuadraditos de color blanco. A su lado, un mensaje ponía lo 6 | siguiente: \"Las siguientes tuplas de la forma x1 , y1 , x2 , y2 son 7 | coordenadas para pintar de negro algunos rectángulos. (coordenadas de 8 | las esquina inferior derecha y superior izquierda)\" Luego se veían k 9 | tuplas de cuatro enteros. Finalmente decía: \"Luego de tener el cuadrado 10 | coloreado de negro en las secciones pertinentes, su tarea es invertir el 11 | cuadrado a su estado original. En una operación puede seleccionar un 12 | rectángulo y pintar todas sus casillas de blanco. El costo de pintar de 13 | blanco un rectángulo de $h$x$w$ es el mínimo entre h y w. Encuentre el 14 | costo mínimo para pintar de blanco todo el cuadrado.\" 15 | 16 | En unos 10 minutos David fue capaz de resolver el problema. 17 | Desgraciadamente esto no es una película y el problema de David no era 18 | un problema del milenio que lo volviera millonario. Pero ¿Sería usted 19 | capaz de resolverlo también? 20 | -------------------------------------------------------------------------------- /Proyectos/old/2023/2/sin_imaginación.md: -------------------------------------------------------------------------------- 1 | 2 | Sin imaginación 3 | 4 | Kevin estaba leyendo un libro sobre Diseño y Análisis de Algoritmos 5 | cuando se topó con un problema que llamó su atención. El texto era el 6 | siguiente: 7 | 8 | Se tiene un grafo bipartito G con U nodos en el la primera parte y V 9 | nodos en la segunda parte. Un subgrafo de G está k-cubierto si todos sus 10 | nodos tienen al menos grado k. Un subgrafo k-cubierto es mínimo si su 11 | cantidad de vértices es la mínima posible. Encuentre el mínimo grafo 12 | k-cubierto para todo k entre 0 y MinDegree (grado mínimo del grafo G). 13 | 14 | Luego de entender el problema, automáticamente pensó dos cosas: 15 | 16 | - Quiero resolver este problema. 17 | 18 | - ¿A los profesores se les abrá acabado la imaginación para los textos 19 | de los proyectos? 20 | -------------------------------------------------------------------------------- /Proyectos/old/2023/2/tito_el_corrupto.md: -------------------------------------------------------------------------------- 1 | 2 | Tito el corrupto 3 | 4 | Tito se dió cuenta de que la carrera de computación estaba acabando con 5 | él y un día decidió darle un cambio radical a su vida. Comenzó a 6 | estudiar Ingeniería Industrial. Luego de unos años de fiesta, logró 7 | finalmente conseguir su título de ingeniero. Luego de otros tantos años 8 | ejerciendo sus estudios (¿?), consiguió ponerse a la cabeza de un gran 9 | proyecto de construcción de carreteras. 10 | 11 | La zona en la que debe trabajar tiene $n$ ciudades con $m$ posibles 12 | carreteras a construir entre ellas. Cada ciudad que sea incluida en el 13 | proyecto aportará $a_i$ dólares al proyecto, mientras que cada carretera 14 | tiene un costo de $w_i$ dólares. Si una carretera se incluye en el 15 | proyecto, las ciudades unidas por esta también deben incluirse. 16 | 17 | El problema está en que Tito quiere utilizar una de las habilidades que 18 | aprendió en sus años de estudio, la de la malversación de fondos. Todo 19 | el dinero necesario para el proyecto que no sea un aporte de alguna 20 | ciudad, lo proveerá el país y pasará por manos de Tito. El dinero 21 | aportado por las ciudades no pasará por sus manos. Tito quiere maximizar 22 | la cantidad de dinero que pasa por él, para poder hacer su magia. Ayude 23 | a Tito a seleccionar el conjunto de carreteras a incluir en el proyecto 24 | para lograr su objetivo. 25 | -------------------------------------------------------------------------------- /Proyectos/old/2023/2/¿Y si empezamos el proyecto?.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/matcom/algos/aaacb78bd8c1ec930f7d2845324c3c90ecdd0934/Proyectos/old/2023/2/¿Y si empezamos el proyecto?.pdf -------------------------------------------------------------------------------- /Proyectos/old/2023/2/¿y_si_empezamos_el_proyecto?.md: -------------------------------------------------------------------------------- 1 | 2 | ¿Y si empezamos el proyecto? 3 | 4 | Daimís y Abraham se juntaron una tarde para hacer su proyecto de DAA. 5 | Tenían que hacerlo, tenían que empezar a trabajar, ellos lo sabían, pero 6 | la verdad es que no tenían ganas. Luego de 45 minutos de decir en bucle: 7 | \"en 5 min arrancamos\", Abraham tuvo una epifanía (lastimosamente no 8 | relacionada con DAA). Inventó un juego que el denominó como 9 | espectacular. 10 | 11 | El juego consistía en lo siguiente: Recortó $2n$ cuadraditos de papel y 12 | los separó en dos grupos $a$ y $b$ de tamaño $n$. Luego tomó cada grupo 13 | y en cada papel escribió un número distinto entre 1 y $n$. Luego los 14 | desordenó y los colocó aleatoria mente en dos filas sin mezclar los 15 | papeles de cada grupo. De esta forma, consiguió dos permutaciones con 16 | los números entre 1 y $n$. Sobre estos dos grupos se puede realizar la 17 | siguiente operación tantas veces como sea necesario: 18 | 19 | - Escoger un entero $i$ entre 1 y $n$ 20 | 21 | - sea x el entero tal que $a_i = x$, intercambia $a_i$ con $a_x$. 22 | 23 | - sea y el entero tal que $b_i = y$, intercambia $b_i$ con $b_x$. 24 | 25 | El objetivo del juego es ordenar las dos filas de papeles de forma 26 | ascendente, con la menor cantidad de operaciones posible. 27 | 28 | Luego de entender las reglas, a Daimís le pareció un juego 29 | extremadamente aburrido, pero por consideración a Abraham, le dijo lo 30 | siguiente: \"Mira, buscamos un algoritmo para el juego y luego empezamos 31 | con DAA\". 32 | -------------------------------------------------------------------------------- /Proyectos/old/2023/3/Deborah y los Stacks.md: -------------------------------------------------------------------------------- 1 | Deborah y los Stacks 2 | 3 | Deborah quiere prepararse para el mundo laboral porque ya casi se gradúa (#!@$ Yeah!) Ella conoce que en general hay muchas cosas que puede aprender del mundo de la programacion: angular, dotnet, docker, ... 4 | 5 | Por suerte Deborah consiguió una lista en internet con todo lo que se puede aprender relacionado con su carrera, la lista S (stacks) le llamaremos. 6 | Cuando siguió buscando online es dio cuenta que las compañias siempre le piden a los candidatos dominio sobre ciertas tecnologias, que, como Deborah investigó bien, todas estas se encuentran en su lista S. 7 | 8 | Por tanto Deborah hace otra lista, esta vez la lista C, mucho mas larga, donde tiene el conjunto de tecnologías que pide cada compañia que Deborah investigó. 9 | 10 | Ahora Deborah se debe decidir sobre que compañías va a aplicar, y para esto selecciona exactamente k, que es su tope de multitasking. Ella sabe que como es rubia las compañías pueden tener prejuicios, pero Deborah es inteligente. Ella va a elegir un conjunto de compañias tal que, si debe aplicar a cualquier otra de las no escogidas, la unión del conocimento obtenido preparandose para un subconjunto de las elegidas le dé exactamente los conocimientos que necesita para aplicar a esta otra compañía. 11 | 12 | -------------------------------------------------------------------------------- /Proyectos/old/2023/3/Kevin el Encargado.md: -------------------------------------------------------------------------------- 1 | Kevin el Encargado 2 | 3 | Kevin ha sido puesto al frente de la comisión de la facultad que elegirá las fechas de las pruebas de los k cursos que se dan en la facultad. 4 | 5 | Cada curso tiene una cantidad de pruebas determinadas que quiere poner, y propone para esto, por ejemplo, los días { 17, 34, 65 y 87 } del curso escolar, si vemos a este como una sucesión de días en los que se imparten clases. Para mostrarse flexibles, los cursos a veces elaboran más de una propuesta incluso. 6 | 7 | Por un problema de desorganización las propuestas se regaron y ahora no se sabe que curso propuso que propuesta, pero ya Kevin esta cansado de tanta gestión. Kevin quiere elegir k propuestas que ninguna quiera poner pruebas el mismo día que las otras, así supone que todo el mundo estará contento, ayude a Kevin. 8 | -------------------------------------------------------------------------------- /Proyectos/old/2023/3/La extraña aventura de Sheyla.md: -------------------------------------------------------------------------------- 1 | 2 | # La extraña aventura de Sheyla 3 | 4 | Sheyla veía a Darío dormido en el sofá mientras pensaba: "Qué flojera, le ganó el cansancio luego de unos pocos champiñones. Yo comí muchos más 5 | que él y aquí estoy, enterita". Fue entonces cuando sintió sonidos de motores provenientes del patio. Cuando salió, se encontró con una inmnensa nave espacial de la que salía una criatura himanoide color azul marino con grandes ojos y cuello largo. La criatura gritaba tratando de hacerse oír sobre los sonidos del motor de la nave: "Comandante, monte, la galaxia la necesita". Sheyla montó en la nave sin pensarlo mucho pues, aunque no conocía a la criatura, alguien color azul marino no podía ser malvado. 6 | 7 | Una vez en la nave, la criatura le explicó la situación. Sucede que los $n$ planetas de la galaxia se estaban apuntando entre sí con $m$ láseres de largo alcance. El mapa de ataques entre planetas conformaba un grafo. Sheyla podía intervenir para cancelar algunos de estos ataques, pero había un número límite $k < m$ de forma que, como mínimo, $m-k$ ataques debían realizarse. Para reducir al mínimo el daño de la galaxia, los altos mandos decidieron que lo mejor sería cancelar ataques de forma que se pudiera separar a los planetas en dos facciones. Estas facciones formarían un grafo bipartito en el que miembros de una facción no se atacarían mutuamente y así al menos la guerra se pudiera controlar. Ayude a Sheyla a encontrar si existe una forma de cancelar hasta $k$ ataques de forma que se obtenga un grafo bipartito. 8 | -------------------------------------------------------------------------------- /Proyectos/old/2023/3/La pregunta.md: -------------------------------------------------------------------------------- 1 | 2 | # La pregunta 3 | 4 | Estaba Karlos pasando (tal vez perdiendo) el tiempo cuando viene Karel y le hace una pregunta. Karlos quería responder que "no" a la pregunta, pero Karel le dijo que no era tan facil, que la respuesta a esa pregunta iba a depender de un conjunto de pequeñas preguntas de "si" o "no" que este tenía. Luego, con las respuestas a esas preguntas de "si" o "no" armó una expresión booleana conformada por negaciones, expresiones "and", expresiones "or" e implicaciones de las pequeñas preguntas. La respuesta de la pregunta grande dependería de la expresión booleana que a la vez dependía de las pequeñas preguntas. Ayude a Karlos a encontrar si existe una distribución de respuestas a las pequeñas preguntas que le permitan responder que "no" a la pregunta grande. 5 | -------------------------------------------------------------------------------- /Proyectos/old/2023/3/La venganza de Alejandra.md: -------------------------------------------------------------------------------- 1 | 2 | # La venganza de Alejandra 3 | 4 | Por algún motivo, a Alejandra no le gustaba la paz y le irritaba que sus compañeros de aula se llevaran tan bien. Ella quería ver 5 | el mundo arder. Un día un demonio se le acercó y le propuso un trato: "A cambio de un cachito de tu alma, te voy a dar el poder para 6 | romper relaciones de amistad de tus compañeros, con la única condición de que no puedes romperlas todas". Sin pensarlo mucho (Qué más 7 | da un pequeño trocito de alma), Alejandra aceptó y se puso a trabajar. Ella conocía, dados sus k compañeros de aula, quiénes eran mutuamente 8 | amigos. 9 | 10 | Como no podía eliminar todas las relaciones de amistad, pensó en qué era lo siguiente que podía hacer más daño. Si una persona quedaba con 11 | uno o dos amigos, podría hacer proyectos en parejas o tríos (casi todos los de la carrera son así), pero si tenía exactamente tres amigos, 12 | cuando llegara un proyecto de tres personas, uno de sus amigos debería quedar afuera y se formaría el caos. 13 | 14 | Ayude a Alejandra a saber si puede sembrar la discordia en su aula eliminando relaciones de amistad entre sus compañeros de forma que todos queden, o bien sin amigos, o con exactamente tres amigos. 15 | -------------------------------------------------------------------------------- /Proyectos/old/2023/3/Lashi el Popular.md: -------------------------------------------------------------------------------- 1 | Lashi el Popular 2 | 3 | Lashi ya casi se gradúa y quiere ser popular, para esto es que escogió esta carrera. 4 | Planea ser popular creando un grupo solo de gente popular, así el también será popular. En el aula hay varias opiniones de quien no es "cool", por ejemplo Karel puede pensar que Lashi no es "cool", o simplemente no pensar nada, a su vez Lashi puede tener sus opiniones. 5 | 6 | Como los populares no pueden ser muchos, Lashi tiene que darse a la tarea de crear un grupo de estudiantes populares, no mayores que un entero positivo k, que cumpla que: 7 | Nadie piensa que alguien del grupo de los populares no es "cool", a no ser que sea otro popular. 8 | 9 | -------------------------------------------------------------------------------- /Proyectos/old/2023/3/Raul el Incongruente.md: -------------------------------------------------------------------------------- 1 | Raul el Incongruente 2 | 3 | Raul últimamente quiere impresionar a su novia Daniela, para esto va usar sus habilidades matemáticas, ya que Daniela tiene varias amigos en la facultad y puede apreciar las peripecias de Raul. Raul le pedirá a cada uno de los n amigos matemáticos de Daniela que le diga 2 numeros a_i, b_i, el segundo mayor o igual que el primero. 4 | 5 | Ahora Raul va a efectuar su acto de alta pericia Matemática sin la ayuda siquiera de calculadora, Raul dirá un número entero x, tal que para todos los pares dichos por los amigos de Daniela, x no será congruente a_i módulo b_i. 6 | 7 | -------------------------------------------------------------------------------- /Proyectos/old/2023/3/Tito quita y pon.md: -------------------------------------------------------------------------------- 1 | 2 | # Tito quita y pon 3 | 4 | Tito cayó en arresto domiciliario tras ser vinculado a una serie de negocios turbios. Tras días de encierro llegó a un punto 5 | en el que estaba absolutamente aburrido. De pronto, encontró un pequeño juego de mesa que, según la cubierta, se llamaba "Quita y pon". 6 | El juego contaba con una colección de cajitas. Cada cajita tenía 3 agujeros de colores. Habían k colores distintos. Además tenía con una bolsa con 7 | de pelotas, cada una con el tamaño exacto para rellenar un agujero. La cantidad de pelotas era suficiente para rellenar todos los agujeros. 8 | 9 | Al inicio del juego, algunos agujeros están llenos con su pelota correspondiente. Tito puede quitar o poner pelotas en los agujeros siempre que cumpla 10 | con que si interactúa con un agujero de color $c$, debe interactuar con todos los agujeros de ese mismo color en todas las cajas existentes. Se entiende 11 | interactuar como quitar (agujero lleno) o poner una pelota (agujero vacío). El objetivo del juego es encontrar si existe un conjunto de interacciones que, luego de ejecutadas resulten en que todas las cajas tengan al menos un agujero lleno y al menos un agujero vacío. 12 | -------------------------------------------------------------------------------- /Proyectos/old/2023/primer_proyecto_distribución.md: -------------------------------------------------------------------------------- 1 | # Distribución 2 | 3 | | Equipo | integrantes | problema | 4 | | ------ | ----------- | -------- | 5 | | Pandingo | Marcos M. Tirador del Riego C411, Leandro Rodriguez Llosa C411 | [El bar](https://github.com/matcom/algos/blob/main/Proyectos/1/El%20Bar.md) | 6 | | Los Pobres Rangers | Sheyla Leyva C-412, Darío Fragas C-411 | [¿Jenga?](https://github.com/matcom/algos/blob/main/Proyectos/1/%C2%BFJenga%3F.md) | 7 | | Dªª | Andry Rosquet Rodríguez C411, Rolando Sánchez Ramos C411 | [¿Jenga?](https://github.com/matcom/algos/blob/main/Proyectos/1/%C2%BFJenga%3F.md) | 8 | | Daame mantequilla de maní | Dianelys Cruz Mengana C-411, Jordan Pla González C-411 | [El lab](https://github.com/matcom/algos/blob/main/Proyectos/1/El%20Lab.md)| McDonaldKnuth's | Elena Rodríguez Horta C412, Hansel Blanco Martí C411 | [Josués y Karels balanceados](https://github.com/matcom/algos/blob/main/Proyectos/1/Josu%C3%A9s%20y%20Karels%20balanceados.md) 9 | | En 4to de milagro | Lázaro A. Castro Arango C-411, Rainel Fernández Abreu C-412 | [Josués y Karels balanceados](https://github.com/matcom/algos/blob/main/Proyectos/1/Josu%C3%A9s%20y%20Karels%20balanceados.md) 10 | | Alpha™ | Josué Rodríguez Ramírez C-412, Mauro Bolado Vizoso C-411 | [Manager Mauro](https://github.com/matcom/algos/blob/main/Proyectos/1/Manager%20Mauro.md) 11 | | Equipo de DAA | Kenny Villalobos Morales C-412, Jesús Santos Capote C-412 | [El zoológico](https://github.com/matcom/algos/blob/main/Proyectos/1/El%20Zoologico.md) 12 | | Papas frita | Daniel Cardenas Cabrera C-411, Lia Zerquera Ferrer C-412 | [Manager Mauro](https://github.com/matcom/algos/blob/main/Proyectos/1/Manager%20Mauro.md) 13 | | Wilson & Yamelis | Marié del Valle Reyes C-411, Laura Victoria Riera Pérez C-411 | [La pelota](https://github.com/matcom/algos/blob/main/Proyectos/1/La%20Pelota.md) 14 | | Myculinsky | Deborah Famadas Rodríguez, David M. García Aguilera | [Presupuesto de la FEU](https://github.com/matcom/algos/blob/main/Proyectos/1/Presupuesto%20de%20la%20FEU.md) 15 | | Rojo C411 | Belsai Arango, Daniela Rodríguez | [Presupuesto de la FEU](https://github.com/matcom/algos/blob/main/Proyectos/1/Presupuesto%20de%20la%20FEU.md) 16 | | DAAemon Tardar yen | Javier A. Oramas López, Eduardo García Maleta | [Procrastinación++](https://github.com/matcom/algos/blob/main/Proyectos/1/Procrastinaci%C3%B3n%2B%2B.md) 17 | | Los piad-osos | Roxana Peña Mendieta C-412, Leonardo Ulloa Ferrer C-412 | [Procrastinación++](https://github.com/matcom/algos/blob/main/Proyectos/1/Procrastinaci%C3%B3n%2B%2B.md) 18 | | Somoza-ntos | Alejandra Monzón Peña C412, Lázaro Daniel González Martínez C411 | [Procrastinación++](https://github.com/matcom/algos/blob/main/Proyectos/1/Procrastinaci%C3%B3n%2B%2B.md) 19 | | Los elenos | Karlos Alejandro Alfonso Rodriguez C411, Karel Camilo Manresa Leon C412 | [Profe Leandro](https://github.com/matcom/algos/blob/main/Proyectos/1/Profe%20Leandro.md) 20 | | Que se pone aqui? | Ernesto Alfonso Hernández C-412, Jorge A. Soler González C-412 | [Profe Leandro](https://github.com/matcom/algos/blob/main/Proyectos/1/Profe%20Leandro.md) 21 | | | Lauren Guerra Hernández C-412, Dennis Fiallo Muñoz C-411 | [Los espías](https://github.com/matcom/algos/blob/main/Proyectos/1/Los%20Espias.md) 22 | | Los Discretos | Kevin Talavera Díaz C411, Sergio Pérez Pantoja C411 | [Sheyla, Lázaro y la libreta de chismes](https://github.com/matcom/algos/blob/main/Proyectos/1/Sheyla%2C%20L%C3%A1zaro%20y%20la%20libreta%20de%20chismes.md) 23 | | yamete kudasai! | Mauricio Mahmud Sánchez C412, Raúl Beltrán Gómez C412 | [Sheyla, Lázaro y la libreta de chismes](https://github.com/matcom/algos/blob/main/Proyectos/1/Sheyla%2C%20L%C3%A1zaro%20y%20la%20libreta%20de%20chismes.md) 24 | | pss, it's broken | Niley González Ferrales C411, Gabriel Hernández Rodríguez C411 | [Tito el tramposo](https://github.com/matcom/algos/blob/main/Proyectos/1/Tito%20el%20tramposo.md) 25 | | Cholo’s Company | Carlos Carret Miranda C412, Leandro Hernández Nuñez C412 | [Tito el tramposo](https://github.com/matcom/algos/blob/main/Proyectos/1/Tito%20el%20tramposo.md) 26 | | Por favor un 3 | Abraham González Rivero C-412, Diamis Alfonso Pérez C-411 | [Minecraft](https://github.com/matcom/algos/blob/main/Proyectos/1/MineCraft.md)| The Code Monkeys | Jesus Aldair Alfonso Perez C412, Victor Manuel Amador Sosa C412 | [Minecraft](https://github.com/matcom/algos/blob/main/Proyectos/1/MineCraft.md) 27 | | The Last Of Us | Francisco Ayra Cáceres C412 | [Minecraft](https://github.com/matcom/algos/blob/main/Proyectos/1/MineCraft.md) 28 | -------------------------------------------------------------------------------- /Proyectos/old/2023/segundo_proyecto_distribución.md: -------------------------------------------------------------------------------- 1 | # Distribución 2 | 3 | ## (no discreta) 4 | 5 | | Equipo | integrantes | problema | 6 | | ------ | ----------- | -------- | 7 | | Pandingo | Marcos M. Tirador del Riego C411, Leandro Rodriguez Llosa C411 | [El viaje](https://github.com/matcom/algos/blob/main/Proyectos/2/el_viaje.md) 8 | | Dªª | Andry Rosquet Rodríguez C411, Rolando Sánchez Ramos C411 | [El viaje](https://github.com/matcom/algos/blob/main/Proyectos/2/el_viaje.md) 9 | | Somoza-ntos | Alejandra Monzón Peña C412, Lázaro Daniel González Martínez C411 | [El viaje](https://github.com/matcom/algos/blob/main/Proyectos/2/el_viaje.md) 10 | | Los Pobres Rangers | Sheyla Leyva C-412, Darío Fragas C-411 | [La extraña aventura de Darío](https://github.com/matcom/algos/blob/main/Proyectos/2/la_extra%C3%B1a_aventura_de_dar%C3%ADo.md) 11 | | McDonaldKnuth's | Elena Rodríguez Horta C412, Hansel Blanco Martí C411 | [La extraña aventura de Darío](https://github.com/matcom/algos/blob/main/Proyectos/2/la_extra%C3%B1a_aventura_de_dar%C3%ADo.md) 12 | | Alpha™ | Josué Rodríguez Ramírez C-412, Mauro Bolado Vizoso C-411 | [La extraña aventura de Darío](https://github.com/matcom/algos/blob/main/Proyectos/2/la_extra%C3%B1a_aventura_de_dar%C3%ADo.md) 13 | | Los elenos | Karlos Alejandro Alfonso Rodriguez C411, Karel Camilo Manresa Leon C412 | [Lázaro presidente del pcc](https://github.com/matcom/algos/blob/main/Proyectos/2/l%C3%A1zaro_presidente_del_pcc.md) 14 | | Equipo de DAA | Kenny Villalobos Morales C-412, Jesús Santos Capote C-412 | [Lázaro presidente del pcc](https://github.com/matcom/algos/blob/main/Proyectos/2/l%C3%A1zaro_presidente_del_pcc.md) 15 | | Los piad-osos | Roxana Peña Mendieta C-412, Leonardo Ulloa Ferrer C-412 | [Lázaro presidente del pcc](https://github.com/matcom/algos/blob/main/Proyectos/2/l%C3%A1zaro_presidente_del_pcc.md) 16 | | Wilson & Yamelis | Marié del Valle Reyes C-411, Laura Victoria Riera Pérez C-411 | [Tito el corrupto](https://github.com/matcom/algos/blob/main/Proyectos/2/tito_el_corrupto.md) 17 | | yamete kudasai! | Mauricio Mahmud Sánchez C412, Raúl Beltrán Gómez C412 | [Tito el corrupto](https://github.com/matcom/algos/blob/main/Proyectos/2/tito_el_corrupto.md) 18 | | Por favor un 3 | Abraham González Rivero C-412, Diamis Alfonso Pérez C-411 | [Tito el corrupto](https://github.com/matcom/algos/blob/main/Proyectos/2/tito_el_corrupto.md) 19 | | Me dejaron cholo | Leandro Hernández Nuñez C412| [Tito el corrupto](https://github.com/matcom/algos/blob/main/Proyectos/2/tito_el_corrupto.md) 20 | | pss pss | Gabriel Hernández Rodríguez C411 | [Lázaro presidente del pcc](https://github.com/matcom/algos/blob/main/Proyectos/2/l%C3%A1zaro_presidente_del_pcc.md) 21 | | Myculinsky | Deborah Famadas Rodríguez, David M. García Aguilera | [¿Y si empezamos el proyecto?](https://github.com/matcom/algos/blob/main/Proyectos/2/%C2%BFY%20si%20empezamos%20el%20proyecto%3F.pdf) 22 | | Rojo C411 | Belsai Arango, Daniela Rodríguez | [Tito el corrupto](https://github.com/matcom/algos/blob/main/Proyectos/2/%C2%BFY%20si%20empezamos%20el%20proyecto%3F.pdf) 23 | | DAAemon Tardar yen | Javier A. Oramas López, Eduardo García Maleta | [El triángulo](https://github.com/matcom/algos/blob/main/Proyectos/2/el_tri%C3%A1ngulo.md) 24 | | Papas frita | Daniel Cardenas Cabrera C-411, Lia Zerquera Ferrer C-412 | [El triángulo](https://github.com/matcom/algos/blob/main/Proyectos/2/el_tri%C3%A1ngulo.md) 25 | | Daame mantequilla de maní | Dianelys Cruz Mengana C-411, Jordan Pla González C-411 | [El triángulo](https://github.com/matcom/algos/blob/main/Proyectos/2/el_tri%C3%A1ngulo.md) 26 | | En 4to de milagro | Lázaro A. Castro Arango C-411, Rainel Fernández Abreu C-412 | [Problema en la pizarra](https://github.com/matcom/algos/blob/main/Proyectos/2/problema_en_la_pizarra.md) | 27 | | Que se pone aqui? | Ernesto Alfonso Hernández C-412, Jorge A. Soler González C-412 | [Problema en la pizarra](https://github.com/matcom/algos/blob/main/Proyectos/2/problema_en_la_pizarra.md) | 28 | | | Lauren Guerra Hernández C-412, Dennis Fiallo Muñoz C-411 | [Problema en la pizarra](https://github.com/matcom/algos/blob/main/Proyectos/2/problema_en_la_pizarra.md) | 29 | | Los Discretos | Kevin Talavera Díaz C411, Sergio Pérez Pantoja C411 | [Sin Imaginación](https://github.com/matcom/algos/blob/main/Proyectos/2/sin_imaginaci%C3%B3n.md) 30 | | Broken phone | Niley González Ferrales C411, Arian Pazo Valido C311 | [Sin imaginación](https://github.com/matcom/algos/blob/main/Proyectos/2/sin_imaginaci%C3%B3n.md) 31 | | Kartucho’s Company | Carlos Carret Miranda C412 | [Sin imaginación](https://github.com/matcom/algos/blob/main/Proyectos/2/sin_imaginaci%C3%B3n.md) 32 | | The Code Monkeys | Jesus Aldair Alfonso Perez C412, Victor Manuel Amador Sosa C412 | [¿Y si empezamos el proyecto?](https://github.com/matcom/algos/blob/main/Proyectos/2/%C2%BFY%20si%20empezamos%20el%20proyecto%3F.pdf) 33 | | The Last Of Us | Francisco Ayra Cáceres C412 | [¿Y si empezamos el proyecto?](https://github.com/matcom/algos/blob/main/Proyectos/2/%C2%BFY%20si%20empezamos%20el%20proyecto%3F.pdf) 34 | -------------------------------------------------------------------------------- /Proyectos/old/2023/tercer-proyecto-distribución.md: -------------------------------------------------------------------------------- 1 | # Distribución 2 | 3 | | Equipo | integrantes | problema | 4 | | ------ | ----------- | -------- | 5 | | Pandingo | Marcos M. Tirador del Riego C411, Leandro Rodriguez Llosa C411 | [La venganza de Alejandra](https://github.com/matcom/algos/blob/main/Proyectos/3/La%20venganza%20de%20Alejandra.md) 6 | | Dªª | Andry Rosquet Rodríguez C411, Rolando Sánchez Ramos C411 | [La venganza de Alejandra](https://github.com/matcom/algos/blob/main/Proyectos/3/La%20venganza%20de%20Alejandra.md) 7 | | Somoza-ntos | Alejandra Monzón Peña C412, Lázaro Daniel González Martínez C411 | [La venganza de Alejandra](https://github.com/matcom/algos/blob/main/Proyectos/3/La%20venganza%20de%20Alejandra.md) 8 | | Los Pobres Rangers | Sheyla Leyva C-412, Darío Fragas C-411 | [La extraña aventura de Sheyla](https://github.com/matcom/algos/blob/main/Proyectos/3/La%20extra%C3%B1a%20aventura%20de%20Sheyla.md) 9 | | McDonaldKnuth's | Elena Rodríguez Horta C412, Hansel Blanco Martí C411 | [La extraña aventura de Sheyla](https://github.com/matcom/algos/blob/main/Proyectos/3/La%20extra%C3%B1a%20aventura%20de%20Sheyla.md) 10 | | Alpha™ | Josué Rodríguez Ramírez C-412, Mauro Bolado Vizoso C-411 | [La extraña aventura de Sheyla](https://github.com/matcom/algos/blob/main/Proyectos/3/La%20extra%C3%B1a%20aventura%20de%20Sheyla.md) 11 | | Los elenos | Karlos Alejandro Alfonso Rodriguez C411, Karel Camilo Manresa Leon C412 | [La pregunta](https://github.com/matcom/algos/blob/main/Proyectos/3/La%20pregunta.md) 12 | | Equipo de DAA | Kenny Villalobos Morales C-412, Jesús Santos Capote C-412 | [La pregunta](https://github.com/matcom/algos/blob/main/Proyectos/3/La%20pregunta.md) 13 | | Los piad-osos | Roxana Peña Mendieta C-412, Leonardo Ulloa Ferrer C-412 | [La pregunta](https://github.com/matcom/algos/blob/main/Proyectos/3/La%20pregunta.md) 14 | | Wilson & Yamelis | Marié del Valle Reyes C-411, Laura Victoria Riera Pérez C-411 | [Kevin el encargado](https://github.com/matcom/algos/blob/main/Proyectos/3/Kevin%20el%20Encargado.md) 15 | | yamete kudasai! | Mauricio Mahmud Sánchez C412, Raúl Beltrán Gómez C412 | [Kevin el encargado](https://github.com/matcom/algos/blob/main/Proyectos/3/Kevin%20el%20Encargado.md) 16 | | Por favor un 3 | Abraham González Rivero C-412, Diamis Alfonso Pérez C-411 | [Kevin el encargado](https://github.com/matcom/algos/blob/main/Proyectos/3/Kevin%20el%20Encargado.md) 17 | | Me dejaron cholo | Leandro Hernández Nuñez C412| [Kevin el encargado](https://github.com/matcom/algos/blob/main/Proyectos/3/Kevin%20el%20Encargado.md) 18 | | pss pss | Gabriel Hernández Rodríguez C411 | [La pregunta](https://github.com/matcom/algos/blob/main/Proyectos/3/La%20pregunta.md) 19 | | Myculinsky | Deborah Famadas Rodríguez, David M. García Aguilera | [Deborah y los stacks](https://github.com/matcom/algos/blob/main/Proyectos/3/Deborah%20y%20los%20Stacks.md) 20 | | Rojo C411 | Belsai Arango, Daniela Rodríguez | [Kevin el encargado](https://github.com/matcom/algos/blob/main/Proyectos/3/Kevin%20el%20Encargado.md) 21 | | DAAemon Tardar yen | Javier A. Oramas López, Eduardo García Maleta | [Lashi el popular](https://github.com/matcom/algos/blob/main/Proyectos/3/Lashi%20el%20Popular.md) 22 | | Papas frita | Daniel Cardenas Cabrera C-411, Lia Zerquera Ferrer C-412 | [Lashi el popular](https://github.com/matcom/algos/blob/main/Proyectos/3/Lashi%20el%20Popular.md) 23 | | Daame mantequilla de maní | Dianelys Cruz Mengana C-411, Jordan Pla González C-411 | [Lashi el popular](https://github.com/matcom/algos/blob/main/Proyectos/3/Lashi%20el%20Popular.md) 24 | | En 4to de milagro | Lázaro A. Castro Arango C-411, Rainel Fernández Abreu C-412 | [Tito quita y pon](https://github.com/matcom/algos/blob/main/Proyectos/3/Tito%20quita%20y%20pon.md) | 25 | | Que se pone aqui? | Ernesto Alfonso Hernández C-412, Jorge A. Soler González C-412 | [Tito quita y pon](https://github.com/matcom/algos/blob/main/Proyectos/3/Tito%20quita%20y%20pon.md) | 26 | | | Lauren Guerra Hernández C-412, Dennis Fiallo Muñoz C-411 | [Tito quita y pon](https://github.com/matcom/algos/blob/main/Proyectos/3/Tito%20quita%20y%20pon.md) | 27 | | Los Discretos | Kevin Talavera Díaz C411, Sergio Pérez Pantoja C411 | [Raul el incongruente](https://github.com/matcom/algos/blob/main/Proyectos/3/Raul%20el%20Incongruente.md) 28 | | Broken phone | Niley González Ferrales C411, Arian Pazo Valido C311 | [Raul el incongruente](https://github.com/matcom/algos/blob/main/Proyectos/3/Raul%20el%20Incongruente.md) 29 | | Kartucho’s Company | Carlos Carret Miranda C412 | [Raul el incongruente](https://github.com/matcom/algos/blob/main/Proyectos/3/Raul%20el%20Incongruente.md) 30 | | The Code Monkeys | Jesus Aldair Alfonso Perez C412, Victor Manuel Amador Sosa C412 | [Deborah y los stacks](https://github.com/matcom/algos/blob/main/Proyectos/3/Deborah%20y%20los%20Stacks.md) 31 | | The Last Of Us | Francisco Ayra Cáceres C412 | [Deborah y los stacks](https://github.com/matcom/algos/blob/main/Proyectos/3/Deborah%20y%20los%20Stacks.md) 32 | -------------------------------------------------------------------------------- /Proyectos/old/2024/asignación/Alejandro,María,Leismael.md: -------------------------------------------------------------------------------- 1 | # Problemas 2 | 3 | ## Plígono mágico 4 | 5 | En un reino lejano, existía un mago llamado Alejandro que protegía un gran tesoro escondido dentro de un castillo mágico. Este castillo tenía la forma de un polígono perfecto y estrictamente convexo con $n$ torres, cada una conectada por paredes fuertes e inquebrantables. 6 | 7 | La reina María que creía firmemente en las ideas de la Revolución (¿Cuál? no sé, la revolución mágica del reino lejano) decidió que era hora de compartir parte del tesoro con el pueblo, pero debía hacerlo con cuidado para no despertar la ira de Alejandro. La reina María llamó a los mejores arquitectos del reino y les pidió que hicieran $k$ cortes en las paredes del castillo, utilizando portales mágicos que conectaran dos torres distintas que no estuvieran directamente adyacentes. Sin embargo, había una advertencia: los portales no podían cruzarse en medio de las paredes, solo en las torres del castillo. 8 | 9 | El objetivo de la reina María era repartir las riquezas de tal manera que cada porción de territorio dentro del castillo fuera lo más equitativa posible. Así, pidió a los arquitectos que maximizaran el área de la porción más pequeña que se formara dentro del castillo después de colocar los $k$ portales mágicos. 10 | 11 | Tu tarea es ayudar a la reina María a encontrar la mejor manera de cortar el castillo para que la distribución del tesoro sea justa para todos. 12 | 13 | (PD: Cuando Alejandro regresó a su castillo y lo vio todo cuarteado, en un ataque de ira convocó a la bestia mágica Yesapin, pero eso es historia para otro momento) 14 | 15 | ## Rompiendo amistades 16 | 17 | Por algún motivo, a María no le gustaba la paz y le irritaba que sus compañeros de aula se llevaran tan bien. Ella quería ver 18 | el mundo arder. Un día un demonio se le acercó y le propuso un trato: "A cambio de un cachito de tu alma, te voy a dar el poder para 19 | romper relaciones de amistad de tus compañeros, con la única condición de que no puedes romperlas todas". Sin pensarlo mucho (Qué más 20 | da un pequeño trocito de alma), María aceptó y se puso a trabajar. Ella conocía, dados sus k compañeros de aula, quiénes eran mutuamente 21 | amigos. 22 | 23 | Como no podía eliminar todas las relaciones de amistad, pensó en qué era lo siguiente que podía hacer más daño. Si una persona quedaba con 24 | uno o dos amigos, podría hacer proyectos en parejas o tríos (casi todos los de la carrera son así), pero si tenía exactamente tres amigos, 25 | cuando llegara un proyecto de tres personas, uno de sus amigos debería quedar afuera y se formaría el caos. 26 | 27 | Ayude a María a saber si puede sembrar la discordia en su aula eliminando relaciones de amistad entre sus compañeros de forma que todos queden, o bien sin amigos, o con exactamente tres amigos. 28 | 29 | ## El triángulo 30 | 31 | Leismalel estaba un día practicando con su instrumento favorito: El triángulo. El 32 | triángulo es un instrumento musical tan espectacular que sus notas se escriben 33 | como números enteros. Este día Leismalel se propuso componer una canción de 34 | una forma bastante peculiar. Tomó $n$ enteros (notas) aleatorios y los escribió 35 | en una lista $a$. Una melodía válida es una subsecuencia de $a$ en la que todos sus 36 | números adyacentes cumplen que: 37 | 38 | - Se diferencian en $1$. 39 | - Son congruentes módulo $7$. 40 | 41 | La canción de Leismalel debe contener exactamente $4$ melodías que cumplan con 42 | lo anterior y además no se intercepten entre sí. Ayude a Leismalel encontrando una 43 | canción que maximice las notas usadas. 44 | -------------------------------------------------------------------------------- /Proyectos/old/2024/asignación/Alejandro,Yisell,Sebastián.md: -------------------------------------------------------------------------------- 1 | # Problemas 2 | 3 | ## Minecraft 4 | 5 | En el juego de MineCraft una de las principales distracciones es la construccion, los mejores jugadores logran hacer monumentos imponentes que sorprenden a todos. Actualmente se esta llevando a cabo un torneo de construcción en el juego, donde la tarea es hacer un muro. Un muro es, como sabemos, una ilera de columnas de bloques de piedra, todos de la misma altura. En MineCraft, para llevar a cabo esta tarea hay 3 movimientos válidos: 6 | 7 | - sacar un bloque de piedra del inventario y aumentar la altura de la columna en cuestion en 1 de altura 8 | - destruir un bloque de piedra de una columna y disminuir la altura de la columna en cuestion en 1 de altura 9 | - mover un bloque de piedra de una columna a otra, aumentando la altura de la 2da columna y disminuyendo la de la 1ra en 1 de altura cada una. 10 | 11 | Se sabe que hacer cada movimiento consume c, d y m de energia respectivamente, y que en los inventarios de los jugadores hay suficienues bloques de piedra siempre. Los jugadores comienzan a jugar con un muro a medio hacer aleatorio, osea, se les da una cantidad n de columnas de bloques de piedra en ilera, de disímiles tamaños y el ganador del torneo será el que construya un muro de largo n utilizando la menor cantidad de energia, no se permite crear columnas nuevas ni dejar huecos de antiguas columnas en el muro porsupuesto. 12 | 13 | Elabore una estrategia que asegure que para cualquier muro inicial a medio hacer con que comience, usted logrará hacer el muro pedido utilizando la menor cantidad de energia posible. 14 | 15 | ## El Viaje 16 | 17 | Alejandro y Semastián quieren hacer un viaje por carretera de La Habana a Guantánamo. 18 | **Objetivo**: Fiesta. 19 | **Obstáculo**: Precio de la gasolina. Incluyendo el punto de salida (La Habana) y de destino (Guantánamo), hay un total de $n$ puntos a los que es posible visitar, unidos por $m$ carreteras cuyos costos de gasolina se conocen. 20 | Los compañeros comienzan entonces a planificar su viaje. 21 | 22 | Luego de pensar por unas horas, Alejandro va entusiasmado hacia Semastián y le entrega una hoja. En esta hoja se encontraban $q$ tuplas de la forma $(u, v, l)$ y le explica que a partir de ahora considerarían como útiles sólo a los caminos entre los puntos $u$ y $v$ cuyo costo de gasolina fuera menor o igual a $l$, para $u$, $v$, $l$ de alguna de las $q$ tuplas. 23 | 24 | Semastián lo miró por un momento y le dijo: *Gracias*. La verdad esta información no era del todo útil para su viaje. Pero para no desperdiciar las horas de trabajo de Alejandro, se dispuso a buscar lo que definió como carreteras útiles. Una carretera útil es aquella que pertenece a algún camino útil. 25 | Ayude a Alejandro y Semastián encontrando el número total de carreteras útiles. 26 | 27 | PD: Cuando le contaron del plan a Yisell, esta se preguntó extrañada por qué Alejandro y Semastián 28 | no habían simplemente buscado el camino de costo mínimo entre La Habana y Guantánamo. 29 | Hay que estudiar más discreta. 30 | 31 | ## El enigma de los subuniversos 32 | 33 | En un rincón distante del universo conocido, la nave Exploradora 7 se dirigía hacia una nebulosa olvidada, una región misteriosa que contenía fragmentos de realidades paralelas. El capitán Zarath y su equipo de científicos estaban encargados de resolver un antiguo enigma interdimensional dejado por una civilización extinta: la Pregunta de los Subuniversos. 34 | 35 | En este sector del cosmos, se decía que existía un conjunto de subuniversos, cada uno representado por una dimensión alternativa al Universo Primario con algunas leyes físicas derivadas de este. Todas las leyes de cualquiera de los subuniversos estaban en el primario, pero no necesariamente los subuniversos tenían todas las leyes del Universo primario. 36 | 37 | El objetivo de la misión era descubrir si era posible utilizar un subconjunto específico de estas dimensiones para reconstruir el Universo Primario, de forma que cada aspecto esencial de la realidad solo fuera influido por una dimensión alternativa única. 38 | 39 | La ingeniera jefe Yisell, mirando la pantalla de datos cuánticos (para que suenen más interesantes), exclamó: "¡El enigma está claro! Nos han dado un conjunto maestro de leyes, al que llamaremos $$ U $$ (Universo Primario), y una colección de dimensiones alternativas, a la que llamaremos $$ S $$. Ahora, la verdadera cuestión es: ¿podemos encontrar una subcolección de estas dimensiones, que cubra cada ley del Universo Primario exactamente una vez?" 40 | 41 | El equipo de la Exploradora 7 sabía que el destino de la misión, y quizás del propio universo, dependía de la respuesta correcta. 42 | -------------------------------------------------------------------------------- /Proyectos/old/2024/asignación/Alex,Carlos,Jorge.md: -------------------------------------------------------------------------------- 1 | # Problemas 2 | 3 | ## Grid 4 | 5 | Un día iba Alex por su facultad cuando ve un cuadrado formado por $n \times n$ 6 | cuadraditos de color blanco. A su lado, un mensaje ponía lo siguiente: "Las 7 | siguientes tuplas de la forma $(x_1, y_1, x_2, y_2)$ son coordenadas para pintar de 8 | negro algunos rectángulos. (coordenadas de la esquina inferior derecha y superior 9 | izquierda)" Luego se veían $k$ tuplas de cuatro enteros. Finalmente decía: 10 | "Luego de tener el cuadrado coloreado de negro en las secciones pertinentes, su 11 | tarea es invertir el cuadrado a su estado original. En una operación puede seleccionar 12 | un rectángulo y pintar todas sus casillas de blanco. El costo de pintar 13 | de blanco un rectángulo de $h \times w$ es el mínimo entre $h$ y $w$. Encuentre el costo 14 | mínimo para pintar de blanco todo el cuadrado." 15 | 16 | En unos 10 minutos Alex fue capaz de resolver el problema. Desgraciadamente 17 | esto no es una película y el problema de Alex no era un problema 18 | del milenio que lo volviera millonario. Pero, ¿sería usted capaz de resolverlo 19 | también? 20 | 21 | ## El Laberinto 22 | 23 | En tiempos antiguos, esos cuando los edificios se derrumbaban por mal tiempo y la conexión mágica era muy lenta, los héroes del reino se aventuraban en el legendario laberinto, un intrincado entramado de pasillos, cada uno custodiado por una bestia mágica. Los pasillos sólo podían caminarse en un sentido pues un viento muy fuerte no te dejaba regresar. Se decía que las criaturas del laberinto, uniendo sus fuerzas mágicas (garras y eso), habían creado ciclos dentro de este, atrapando a cualquiera que entrara a ellos en una especie de montaña rusa sin final en la que un monstruo se reía de ti cada vez que le pasabas por al lado, una locura. 24 | 25 | El joven héroe Carlos, se enfrentaba a una prueba única: desmantelar los ciclos eternos y liberar los pasillos del laberinto para que su gente pudiera cruzarlo sin caer en los bucles infinitos de burla y depravación. 26 | 27 | Cada vez que el héroe asesinaba cruelmente (no importa porque somos los buenos) a la criatura que cuidaba una un camino, este se rompía y desaparecía. Orión era fuerte, pero no tanto, debía optimizar bien a cuántos monstruos enfrentarse. Ayude al héroe encontrando la mínima cantidad de monstruos que debe matar para eliminar todas las montañas rusas de burla y depravación. 28 | 29 | ## El profe 30 | 31 | Jorge es profesor de programación. En sus ratos libres, le gusta divertirse con las estadísticas de sus pobres estudiantes reprobados. Los estudiantes están separados en $n$ grupos. Casualmente, este año, todos los estudiantes reprobaron alguno de los dos exámenes finales: $P$ (POO) y $R$ (Recursividad). 32 | 33 | Esta tarde, Jorge decide entretenerse separando a los estudiantes suspensos en conjuntos de tamaño $k$ que cumplan lo siguiente: En un mismo conjunto, todos los estudiantes son del mismo grupo $i$ ($1 \leq i \leq n$) o suspendieron por el mismo examen $P$ o $R$. 34 | 35 | Conociendo el grupo y la prueba suspendida de cada estudiante, y el tamaño de los conjuntos, ayude a Jorge a saber cuántos conjuntos de estudiantes suspensos puede formar. 36 | -------------------------------------------------------------------------------- /Proyectos/old/2024/asignación/Alex,Juan,Javier.md: -------------------------------------------------------------------------------- 1 | # Problemas 2 | 3 | ## El Laberinto 4 | 5 | En tiempos antiguos, esos cuando los edificios se derrumbaban por mal tiempo y la conexión mágica era muy lenta, los héroes del reino se aventuraban en el legendario laberinto, un intrincado entramado de pasillos, cada uno custodiado por una bestia mágica. Los pasillos sólo podían caminarse en un sentido pues un viento muy fuerte no te dejaba regresar. Se decía que las criaturas del laberinto, uniendo sus fuerzas mágicas (garras y eso), habían creado ciclos dentro de este, atrapando a cualquiera que entrara a ellos en una especie de montaña rusa sin final en la que un monstruo se reía de ti cada vez que le pasabas por al lado, una locura. 6 | 7 | El joven héroe Juan, se enfrentaba a una prueba única: desmantelar los ciclos eternos y liberar los pasillos del laberinto para que su gente pudiera cruzarlo sin caer en los bucles infinitos de burla y depravación. 8 | 9 | Cada vez que el héroe asesinaba cruelmente (no importa porque somos los buenos) a la criatura que cuidaba una un camino, este se rompía y desaparecía. Orión era fuerte, pero no tanto, debía optimizar bien a cuántos monstruos enfrentarse. Ayude al héroe encontrando la mínima cantidad de monstruos que debe matar para eliminar todas las montañas rusas de burla y depravación. 10 | 11 | ## Tramposo 12 | 13 | Javier está pasando un curso de Diseño y Análisis de Algoritmos. Este año, por primera vez en la historia, los profesores han decidido evaluar el curso mediante un examen final y Javier se ha dado cuenta de que, a grandes rasgos, está frito. A pesar de ser un poco barco, es de hecho un muchacho inteligente y rápidamente se da cuenta de que su única forma de aprobar era hacer trampa. El día de la prueba, Javier se sentó en el asiento que estaba entre Hansel y Elena para fijarse, con la esperanza de que, uniendo las preguntas respondidas por cada uno, se pudiera formar un examen correcto. 14 | 15 | El examen tiene $n$ preguntas, ordenadas en la hoja. Elena y Hansel pueden no ser capaces de responder cada uno el examen entero, pero todas las preguntas que responden están correctas. Se conoce cuáles preguntas respondió cada uno y se reciben como dos listas ordenadas de enteros entre $1$ y $n$. Javier tiene $p$ oportunidades para mirar hacia la izquierda (hoja de Hansel) o hacia la derecha (hoja de Elena) y su agilidad mental le alcanza para ver las respuestas de $k$ preguntas consecutivas (en cualquier posición) cada vez que echa una mirada a un examen. 16 | 17 | Ayude a Javier a saber la cantidad máxima de preguntas que puede responder con su (tramposa) estrategia. 18 | 19 | ## Ciudades 20 | 21 | Cuba tiene inicialmente $N$ ciudades aisladas, donde la $i$-ésima ciudad tiene una significancia de $A_i$. Alex, el Presidente de Cuba quiere conectar todas las ciudades. Él puede construir una carretera bidireccional de longitud $L$ $(L > 0)$ desde la ciudad $X$ a la ciudad $Y$ si $(A_X \& A_Y \& L) = L$, donde $ \& $ representa el operador AND bit a bit. 22 | 23 | ¿Cuál es la longitud total mínima de las carreteras que tiene que construir para conectar todas las ciudades en Cuba? Imprime $-1$ si es imposible. 24 | 25 | Nota: 26 | 27 | Se dice que la ciudad $X$ y la ciudad $Y$ están conectadas si existe una secuencia de ciudades $C_1, C_2, \dots, C_K$ $(K \geq 1)$ tal que $C_1 = X$, $C_K = Y$, y existe una carretera desde $C_i$ a $C_{i+1}$ $(1 \leq i < K)$. Todas las ciudades en Cuba se dicen conectadas cuando cada par de ciudades en Cuba está conectado. 28 | -------------------------------------------------------------------------------- /Proyectos/old/2024/asignación/Alfredo,Leonardo,Anthuan.md: -------------------------------------------------------------------------------- 1 | # Problemas 2 | 3 | ## MEX Subsecuencia 4 | 5 | Alfredo tiene un array 6 | $a_1, a_2, \dots, a_N$. Necesita encontrar el número de formas de dividir el array en subarrays contiguos tal que: 7 | 8 | - Cada elemento de la secuencia $a$ pertenezca exactamente a uno de los subarrays. 9 | - Existe un número entero $m$ tal que el MEX de cada subarray sea igual a $m$. El MEX de una secuencia es el menor número entero no negativo que no aparece en dicha secuencia. 10 | 11 | Ayuda a Alfredo con esta tarea. 12 | 13 | ## Magia 14 | 15 | Rodrigo es el maestro de una academia de magia y debe organizar y clasificar sus ingredientes mágicos. Son tan mágicos que, consumidos de la forma adecuada, te permiten ver criaturas fantásticas y luces de colores, dejando poca resaca (Rodrigo no los consume pues es un maestro sano). Tiene dos estantes mágicos, uno llamado "a" y otro llamado "b", ambos con $n$ frascos de pociones, cada uno etiquetado con un número del 1 al $n$. Cada frasco está en un lugar aleatorio en los estantes, pero el número en cada frasco es único en cada estante. 16 | 17 | Tu tarea es ayudar a Rodrigo a organizar ambos estantes en el orden correcto, de modo que los números en los frascos estén en orden ascendente de izquierda a derecha en ambos estantes. Sin embargo, estos estantes mágicos sólo se pueden mover siguiendo unas reglas: 18 | 19 | 1. Puedes elegir cualquier número $i$ entre 1 y $n$; 20 | 2. Encuentra el frasco en el estante "a" que tiene el número $i$ y cambia su posición con el frasco en la posición $i$; 21 | 3. Luego, encuentra el frasco en el estante "b" que tiene el número $i$ y cambia su posición con el frasco en la posición $i$. 22 | 23 | Tu objetivo es organizar ambos estantes con el menor número de movimientos posible, asegurándote de que todos los frascos en ambos estantes estén en el orden correcto al finalizar la tarea. 24 | 25 | ## Tesoro pirata 26 | 27 | En una isla desierta, un grupo de piratas ha trazado un mapa lleno de senderos secretos. Cada sendero tiene un tesoro escondido en alguna parte de su trayecto. Los piratas de la tripulación del infame capitán Jack Amarow quieren esconderse en las intersecciones de los senderos para vigilar sus tesoros. En una intersección se pueden cruzar dos senderos o más. Todas las intersecciones tienen unas palmeras a las que los piratas se pueden encaramar. Mientras más alta la palmera, más difícil es subirse y por tanto más costo tiene. 28 | 29 | Tu misión es ayudar a los piratas a encontrar el conjunto mínimo de intersecciones donde deben esconderse para poder vigilar todos los senderos que llevan a sus tesoros y que el costo de subirse en las palmas sea mínimo. 30 | -------------------------------------------------------------------------------- /Proyectos/old/2024/asignación/Ana,Diana,Carlos.md: -------------------------------------------------------------------------------- 1 | # Problemas 2 | 3 | ## El Viaje 4 | 5 | Ana Karla y Diana quieren hacer un viaje por carretera de La Habana a Guantánamo. 6 | **Objetivo**: Fiesta. 7 | **Obstáculo**: Precio de la gasolina. Incluyendo el punto de salida (La Habana) y de destino (Guantánamo), hay un total de $n$ puntos a los que es posible visitar, unidos por $m$ carreteras cuyos costos de gasolina se conocen. 8 | Los compañeros comienzan entonces a planificar su viaje. 9 | 10 | Luego de pensar por unas horas, Ana Karla va a hacia Diana y le entrega una hoja. En esta hoja se encontraban $q$ tuplas de la forma $(u, v, l)$ y le explica que a partir de ahora considerarían como útiles sólo a los caminos entre los puntos $u$ y $v$ cuyo costo de gasolina fuera menor o igual a $l$, para $u$, $v$, $l$ de alguna de las $q$ tuplas. 11 | 12 | Diana la miró por un momento y le dijo: *Gracias*. La verdad esta información no era del todo útil para su viaje. Pero para no desperdiciar las horas de trabajo de Ana Karla, se dispuso a buscar lo que definió como carreteras útiles. Una carretera útil es aquella que pertenece a algún camino útil. 13 | Ayude a Ana Karla y Diana encontrando el número total de carreteras útiles. 14 | 15 | PD: Cuando le contaron del plan a Carlos, este se preguntó extrañado por qué Ana y Diana 16 | no habían simplemente buscado el camino de costo mínimo entre La Habana y Guantánamo. 17 | Hay que estudiar más discreta. 18 | 19 | ## Estrategia de Batallones en la Guerra 20 | 21 | En medio de una gran guerra, los generales están planeando una estrategia con sus batallones. Cada batallón controla un área específica del territorio, y algunos de estos territorios pueden superponerse, lo que crea conflictos de control entre los batallones. 22 | 23 | Dada una colección finita $C$ de territorios controlados por los batallones, y un número entero positivo $k \leq |C|$, tu misión es determinar si es posible organizar al menos $k$ batallones de manera que cada uno controle un territorio completamente distinto de los demás, es decir, sin superposiciones ni conflictos entre ellos. 24 | 25 | ## El profe 26 | 27 | Rodrigo es profesor de programación. En sus ratos libres, le gusta divertirse con las estadísticas de sus pobres estudiantes reprobados. Los estudiantes están separados en $n$ grupos. Casualmente, este año, todos los estudiantes reprobaron alguno de los dos exámenes finales: $P$ (POO) y $R$ (Recursividad). 28 | 29 | Esta tarde, Rodrigo decide entretenerse separando a los estudiantes suspensos en conjuntos de tamaño $k$ que cumplan lo siguiente: En un mismo conjunto, todos los estudiantes son del mismo grupo $i$ ($1 \leq i \leq n$) o suspendieron por el mismo examen $P$ o $R$. 30 | 31 | Conociendo el grupo y la prueba suspendida de cada estudiante, y el tamaño de los conjuntos, ayude a Rodrigo a saber cuántos conjuntos de estudiantes suspensos puede formar. 32 | -------------------------------------------------------------------------------- /Proyectos/old/2024/asignación/Claudia,Roger,Jan.md: -------------------------------------------------------------------------------- 1 | # Problemas 2 | 3 | ## Zombies 4 | 5 | En una ciudad infestada de zombis, los pocos supervivientes están intentando escapar. La ciudad está representada por un conjunto de intersecciones conectadas por calles, y cada camino tiene una longitud. 6 | 7 | Roger, uno de los supervivientes propone buscar el camino más corto en un mapa que encontró tirado por ahí. Cuando el grupo está a punto de partir, Jan se levanta y dice: "Tengo una idea mejor. En lugar de ir por el camino más corto, busquemos uno de los más largos, de al menos tamaño $k$. Así sorprenderemos a los zombies, nunca dejes que sepan tu próximo movimiento". 8 | 9 | El grupo de brillantes supervivientes comenzó a aplaudir asombrado, mientras que Roger se quedaba frío pensando "¿de cuando acá los zombies pueden razonar?" 10 | 11 | Ayude al grupo encontrando, dado un mapa de intersecciones y calles, si existe un camino simple de tamaño al menos $k$. 12 | 13 | (PD: De más está decir que todo el grupo murió entre terribles sufrimientos). 14 | 15 | ## Gato y Ratón 16 | 17 | Un juego en un grafo no dirigido es jugado por dos jugadores, Ratón y Gato, que alternan turnos. 18 | 19 | El grafo se da de la siguiente manera: `graph[a]` es una lista de todos los nodos `b` tales que `ab` es una arista del grafo. 20 | 21 | El ratón comienza en el nodo 1 y juega primero, el gato comienza en el nodo 2 y juega segundo, y hay un agujero en el nodo 0. 22 | 23 | Durante el turno de cada jugador, deben viajar a lo largo de una arista del grafo que conecta con el nodo en el que se encuentran. Por ejemplo, si el ratón está en el nodo 1, debe viajar a cualquier nodo en `graph[1]`. 24 | 25 | Además, no se permite que el gato viaje al agujero (nodo 0). 26 | 27 | El juego puede terminar de tres maneras: 28 | 29 | 1. Si alguna vez el gato ocupa el mismo nodo que el ratón, el gato gana. 30 | 2. Si alguna vez el ratón llega al agujero, el ratón gana. 31 | 3. Si alguna vez se repite una posición (es decir, los jugadores están en la misma posición que en un turno anterior, y es el turno del mismo jugador para moverse), el juego termina en empate. 32 | 33 | Dado un grafo, y suponiendo que ambos jugadores juegan de manera óptima, devuelve: 34 | 35 | - 1 si el ratón gana el juego, 36 | - 2 si el gato gana el juego, o 37 | - 0 si el juego termina en empate. 38 | 39 | ## Sufijo Balanceado 40 | 41 | Te dan una cadena $S$ de longitud $N$ y un número entero $K$. 42 | 43 | Sea $C$ el conjunto de todos los caracteres en $S$. La cadena $S$ se llama buena si, para cada sufijo de $S$: 44 | 45 | La diferencia entre las frecuencias de cualquier par de caracteres en $C$ no excede $K$. 46 | En particular, si el conjunto $C$ tiene un solo elemento, la cadena $S$ es buena. 47 | 48 | Encuentra si existe una reordenación de $S$ que sea buena. 49 | Si existen múltiples reordenaciones de este tipo, imprime la reordenación lexicográficamente más pequeña. 50 | Si no existe tal reordenación, imprime $-1$ en su lugar. 51 | 52 | Nota que un sufijo de una cadena se obtiene eliminando algunos (posiblemente cero) caracteres desde el principio de la cadena. Por ejemplo, los sufijos de $S = abca$ son $\\{a, ca, bca, abca\\}$. 53 | -------------------------------------------------------------------------------- /Proyectos/old/2024/asignación/Daniel,Anabel,Enzo.md: -------------------------------------------------------------------------------- 1 | # Problemas 2 | 3 | ## El secreto de la Isla 4 | 5 | En el corazón del vasto océano azul, existe una isla tropical conocida como La Isla de Coba, un lugar de exuberante vegetación y antigua sabiduría. La tribu que habita en esta isla ha vivido en armonía con la naturaleza durante siglos, guiados por un consejo de ancianos que custodian el equilibrio entre los habitantes de la isla y sus recursos. 6 | 7 | Sin embargo, una nueva generación de líderes debe ser elegida, y para ello, los ancianos han planteado un desafío ancestral. Los aspirantes al consejo deben descubrir un grupo selecto de **guardianes**, quienes, colocados en puntos estratégicos de la isla, podrían vigilar a todos los aldeanos sin dejar a ninguno sin supervisión directa o indirecta. 8 | 9 | La isla tiene una serie de aldeas unidas entre ellas por caminos. El reto es encontrar un grupo de guardianes tan pequeño como sea posible, de modo que cada aldea esté bajo la protección directa de un guardián, o al menos, esté conectada a una aldea donde se haya asignado un guardián. 10 | 11 | Los jóvenes líderes deben resolver este desafío para mostrar su valía. Con cada nueva selección de guardianes, la estabilidad de la isla se estremece. El futuro de La Isla de Coba depende de que uno de los jóvenes (como tú) encuentre esta distribución óptima de guardianes y se convierta en el próximo jefe absoluto. 12 | 13 | ## Distancia de árboles 14 | 15 | Un árbol se define como un grafo no dirigido y conectado con $n$ vértices y $n-1$ aristas. La distancia entre dos vértices en un árbol es igual al número de aristas en el camino simple único entre ellos. 16 | 17 | Se te dan dos enteros $x$ y $y$. Construye un árbol con las siguientes propiedades: 18 | 19 | - El número de pares de vértices con una distancia par entre ellos es igual a $x$. 20 | - El número de pares de vértices con una distancia impar entre ellos es igual a $y$. 21 | 22 | Por par de vértices, nos referimos a un par ordenado de dos vértices (posiblemente, el mismo o diferente). 23 | 24 | ## Torneo 25 | 26 | Tan pronto como comienza el toreno de programación competitiva, tu experimentado equipo de $3$ personas se da cuenta inmediatamente de que este presenta $a$ problemas fáciles, $b$ problemas medianos, y $c$ problemas difíciles. Resolver un problema les tomará a cualquiera de ustedes $2$, $3$ o $4$ unidades de tiempo, dependiendo de si el problema es fácil, mediano o difícil. Independientemente de la dificultad del problema, la última unidad de tiempo gastada en resolverlo debe gastarse utilizando la computadora compartida. 27 | 28 | Tu equipo organiza sus esfuerzos de manera que cada uno de ustedes comienza (y termina) resolviendo problemas en unidades de tiempo enteras. Cualquier problema dado solo puede ser resuelto por un concursante; requiere una cantidad continua de tiempo (que depende de la dificultad del problema). Ninguno de los $3$ puede resolver más de un problema a la vez, pero pueden comenzar a resolver un nuevo problema inmediatamente después de terminar uno. De manera similar, la computadora compartida no puede ser utilizada por más de uno de ustedes al mismo tiempo, pero cualquiera de ustedes puede comenzar a usar la computadora (para completar el problema que se está resolviendo actualmente) inmediatamente después de que alguien más deje de usarla. 29 | 30 | Dado que el concurso dura $l$ unidades de tiempo, encuentra el número máximo de problemas que tu equipo puede resolver. Además, encuentra una forma de resolver el número máximo de problemas. 31 | -------------------------------------------------------------------------------- /Proyectos/old/2024/asignación/José,Yonatan,David.md: -------------------------------------------------------------------------------- 1 | # Problemas 2 | 3 | ## PCC 4 | 5 | Han pasado 20 años desde que José se graduó de Ciencias de la Computación 6 | (haciendo una muy buena tesis) y las vueltas de la vida lo llevaron a convertirse 7 | en el presidente del Partido Comunista de Cuba. Una de sus muchas responsabilidades 8 | consiste en visitar zonas remotas. En esta ocasión debe visitar una 9 | ciudad campestre de Pinar del Río. 10 | 11 | También han pasado 20 años desde que David consiguió su título en MATCOM. 12 | Tras años de viaje por las grandes metrópolis del mundo, en algún punto 13 | decidió que prefería vivir una vida tranquila, aislada de la urbanización, en una 14 | tranquila ciudad de Pinar del Río. Las vueltas de la vida quisieron que precisamente 15 | David fuera el único universitario habitando la ciudad que José se 16 | dispone a visitar. 17 | 18 | Los habitantes de la zona entraron en pánico ante la visita de una figura tan 19 | importante y decidieron reparar las calles de la ciudad por las que transitaría 20 | José. El problema está en que nadie sabía qué ruta tomaría el presidente y 21 | decidieron pedirle ayuda a David. 22 | 23 | La ciudad tiene $n$ puntos importantes, unidos entre sí por calles cuyos 24 | tamaños se conoce. Se sabe que José comenzará en alguno de esos puntos 25 | ($s$) y terminará el viaje en otro ($t$). Los ciudadanos quieren saber, para 26 | cada par $s$, $t$, cuántas calles participan en algún camino de distancia mínima 27 | entre $s$ y $t$. 28 | 29 | ## Alianza de Robots LGBT 30 | 31 | En una futurística ciudad llena de robots, cada robot pertenece a una facción identificada por un color específico. Las piezas de los robots fueron además creadas por varios fabricantes distintos, algunos robots tienen piezas hechas por fabricantes en común. 32 | 33 | Los robots de diferentes facciones están buscando formar una alianza estratégica multicolor. Esta alianza debe ser un grupo de robots donde todos tengan, dos a dos, alguna pieza hecha por el mismo fabricante, y lo más importante: debe haber al menos un robot de cada color en esta alianza. 34 | 35 | Dado un grupo de robots, determine si es posible o no formar una alianza multicolor. 36 | 37 | ## Subsecuencia Buena 38 | 39 | Supongamos que tienes un array binario $B$ de longitud $N$. Una secuencia $x_1, x_2, \dots, x_k$ se llama buena con respecto a $B$ si satisface las siguientes condiciones: 40 | 41 | - $1 \leq x_1 < x_2 < \dots < x_k \leq N + 1$ 42 | - Para cada par $(i, j)$ tal que $1 \leq i < j \leq k$, el subarray $B[x_i : x_j - 1]$ contiene $(j - i)$ unos más que ceros. Es decir, si $B[x_i : x_j - 1]$ contiene $c_1$ unos y $c_0$ ceros, entonces se debe cumplir que $c_1 - c_0 = j - i$. 43 | 44 | Aquí, $B[L : R]$ denota el subarray que consiste en los elementos $[B_L, B_{L + 1}, B_{L + 2}, \dots, B_R]$. Nota que, en particular, una secuencia de tamaño $1$ siempre es buena. 45 | 46 | Por ejemplo, supongamos que $B = [0, 1, 1, 0, 1, 1]$. Entonces: 47 | 48 | - La secuencia $[1, 4, 7]$ es una secuencia buena. Los subarrays que necesitan ser revisados son $B[1 : 3]$, $B[1 : 6]$ y $B[4 : 6]$, que todos cumplen con la condición. 49 | - La secuencia $[1, 5]$ no es buena, porque $B[1 : 4] = [0, 1, 1, 0]$ contiene un número igual de ceros y unos (cuando debería contener un $1$ extra). 50 | 51 | Yonatan le dio a David un array binario $A$ de tamaño $N$ y le pidió que encontrara la secuencia más larga que sea buena con respecto a $A$. Ayuda a David a encontrar una de estas secuencias. 52 | 53 | Si existen múltiples secuencias más largas posibles, puedes devolver cualquiera de ellas. 54 | -------------------------------------------------------------------------------- /Proyectos/old/2024/asignación/Lázaro,José,Max.md: -------------------------------------------------------------------------------- 1 | # Problemas 2 | 3 | ## Alianza de Robots LGBT 4 | 5 | En una futurística ciudad llena de robots, cada robot pertenece a una facción identificada por un color específico. Las piezas de los robots fueron además creadas por varios fabricantes distintos, algunos robots tienen piezas hechas por fabricantes en común. 6 | 7 | Los robots de diferentes facciones están buscando formar una alianza estratégica multicolor. Esta alianza debe ser un grupo de robots donde todos tengan, dos a dos, alguna pieza hecha por el mismo fabricante, y lo más importante: debe haber al menos un robot de cada color en esta alianza. 8 | 9 | Dado un grupo de robots, determine si es posible o no formar una alianza multicolor. 10 | 11 | ## PCC 12 | 13 | Han pasado 20 años desde que José se graduó de Ciencias de la Computación 14 | (haciendo una muy buena tesis) y las vueltas de la vida lo llevaron a convertirse 15 | en el presidente del Partido Comunista de Cuba. Una de sus muchas responsabilidades 16 | consiste en visitar zonas remotas. En esta ocasión debe visitar una 17 | ciudad campestre de Pinar del Río. 18 | 19 | También han pasado 20 años desde que Max consiguió su título en MATCOM. 20 | Tras años de viaje por las grandes metrópolis del mundo, en algún punto 21 | decidió que prefería vivir una vida tranquila, aislada de la urbanización, en una 22 | tranquila ciudad de Pinar del Río. Las vueltas de la vida quisieron que precisamente 23 | Max fuera el único universitario habitando la ciudad que José se 24 | dispone a visitar. 25 | 26 | Los habitantes de la zona entraron en pánico ante la visita de una figura tan 27 | importante y decidieron reparar las calles de la ciudad por las que transitaría 28 | José. El problema está en que nadie sabía qué ruta tomaría el presidente y 29 | decidieron pedirle ayuda a Max. 30 | 31 | La ciudad tiene $n$ puntos importantes, unidos entre sí por calles cuyos 32 | tamaños se conoce. Se sabe que José comenzará en alguno de esos puntos 33 | ($s$) y terminará el viaje en otro ($t$). Los ciudadanos quieren saber, para 34 | cada par $s$, $t$, cuántas calles participan en algún camino de distancia mínima 35 | entre $s$ y $t$. 36 | 37 | ## Sufijo Balanceado 38 | 39 | Te dan una cadena $S$ de longitud $N$ y un número entero $K$. 40 | 41 | Sea $C$ el conjunto de todos los caracteres en $S$. La cadena $S$ se llama buena si, para cada sufijo de $S$: 42 | 43 | La diferencia entre las frecuencias de cualquier par de caracteres en $C$ no excede $K$. 44 | En particular, si el conjunto $C$ tiene un solo elemento, la cadena $S$ es buena. 45 | 46 | Encuentra si existe una reordenación de $S$ que sea buena. 47 | Si existen múltiples reordenaciones de este tipo, imprime la reordenación lexicográficamente más pequeña. 48 | Si no existe tal reordenación, imprime $-1$ en su lugar. 49 | 50 | Nota que un sufijo de una cadena se obtiene eliminando algunos (posiblemente cero) caracteres desde el principio de la cadena. Por ejemplo, los sufijos de $S = abca$ son $\\{a, ca, bca, abca\\}$. 51 | -------------------------------------------------------------------------------- /Proyectos/old/2024/asignación/Marco,Yoan,kevin.md: -------------------------------------------------------------------------------- 1 | # Problemas 2 | 3 | ## Transformación de Redes de Esqueletos 4 | 5 | Marco el nigromante se dedicaba a unir huesos de criaturas muertas para armar esqueletos bizarros. Cada hueso se une a al menos otro por conexiones mágicas y está nombrado con un número entero. 6 | 7 | De pronto, moviendo huesos por aquí y por allá, creó una criatura tan horrorosa que parecía salida de la mismísima Australia, pero muerta. Marco sintió amor a primera vista, completa fascinación. 8 | 9 | Con una criatura tan horrenda, el resto de sus creaciones palidecían en comparación, pero desmantelarlas representaba un desperdicio de componentes mágicos. De pronto se le ocurrió una idea. Quizás podía convertir alguna de sus otras criaturas en una copia (o al menos algo medio parecido) de esta bizarra genialidad sólo renombrando los huesos que las conformaban. Para él, una criatura es parecida a otra cuando todos sus huesos dos a dos están conectados a exactamente la misma cantidad de huesos y estos huesos conectados tienen los mismos nombres dos a dos. 10 | 11 | Ayude a Marco a encontrar un método con el que saber si un esqueleto arbitrario puede convertirse en una copia parecida a su criatura favorita sólo cambiándole los nombres a sus huesos. 12 | 13 | ## Dos contadores 14 | 15 | Tienes $2$ contadores $a$ y $b$, ambos inicializados en $0$. También tienes un puntaje inicializado en $0$. 16 | 17 | Al inicio de cada minuto, desde el minuto $1$ hasta el minuto $N$, debes incrementar ya sea $a$ o $b$ en $1$. 18 | 19 | Adicionalmente, hay $M$ eventos. El evento $i$ ocurre en el minuto $T_i + 0.5$ y tiene tipo $C_i$ $(C_i \in \{1, 2\})$. 20 | 21 | En cada evento, los contadores o el puntaje se actualizan de la siguiente manera: 22 | 23 | ```cpp 24 | if (type == 1): 25 | if (a > b): 26 | score = score + 1; 27 | else: 28 | a = 0; 29 | b = 0; 30 | else: 31 | if (a < b): 32 | score = score + 1; 33 | else: 34 | a = 0; 35 | b = 0; 36 | ``` 37 | 38 | Tu tarea es maximizar el puntaje después de que hayan pasado $N$ minutos. 39 | 40 | ## Créditos 41 | 42 | El colegio de Yoan comienza la próxima semana. Hay $S$ asignaturas en total, y necesita elegir $K$ de ellas para asistir cada día, para cumplir con el número requerido de créditos para pasar el semestre. Hay $N+1$ edificios. Su hostal está en el edificio número $0$. La asignatura $i$ se enseña en el edificio $A_i$. Después de cada asignatura, hay un descanso durante el cual regresa a su hostal. Hay $M$ caminos bidireccionales de longitud $1$ que conectan el edificio $u$ con el edificio $v$. Encuentra la distancia total mínima posible que Yoan necesita recorrer cada día si elige sus asignaturas sabiamente. 43 | -------------------------------------------------------------------------------- /Proyectos/old/2024/asignación/Maykol,Brian,Davier.md: -------------------------------------------------------------------------------- 1 | # Problemas 2 | 3 | ## Videojuego 4 | 5 | Estás creando un nivel para un videojuego. El nivel consiste en $n$ habitaciones dispuestas en un círculo. Las habitaciones están numeradas del $1$ al $n$. Cada habitación contiene exactamente una salida: completar la $j$-ésima habitación te permite pasar a la $(j+1)$-ésima habitación (y completar la $n$-ésima habitación te permite pasar a la $1$-era habitación). 6 | 7 | Se te da la descripción del multiconjunto de $n$ cofres: el $i$-ésimo cofre tiene un valor de tesoro $c_i$. 8 | 9 | Cada cofre puede ser de uno de dos tipos: 10 | 11 | - cofre normal — cuando un jugador entra en una habitación con este cofre, recoge el tesoro y procede a la siguiente habitación; 12 | - cofre trampa — cuando un jugador entra en una habitación con este cofre, el cofre se lo come vivo, y él pierde. 13 | 14 | El jugador comienza en una habitación aleatoria, con cada habitación teniendo la misma probabilidad de ser elegida. Las ganancias del jugador son iguales al valor total de los tesoros que haya recogido antes de perder. 15 | 16 | Se te permite elegir el orden en que los cofres se colocan en las habitaciones. Para cada $k$ de $1$ a $n$, coloca los cofres en las habitaciones de tal manera que: 17 | 18 | - cada habitación contenga exactamente un cofre; 19 | - exactamente $k$ cofres sean trampas; 20 | - el valor esperado de las ganancias del jugador sea el mínimo posible. 21 | 22 | Ten en cuenta que para cada $k$ la colocación se elige de manera independiente. 23 | 24 | Se puede ver que está en la forma de $\frac{P}{Q}$ donde $P$ y $Q$ son enteros no negativos y $Q≠0$. 25 | 26 | ## Grid 27 | 28 | Un día iba Maykol por su facultad cuando ve un cuadrado formado por $n \times n$ 29 | cuadraditos de color blanco. A su lado, un mensaje ponía lo siguiente: "Las 30 | siguientes tuplas de la forma $(x_1, y_1, x_2, y_2)$ son coordenadas para pintar de 31 | negro algunos rectángulos. (coordenadas de la esquina inferior derecha y superior 32 | izquierda)" Luego se veían $k$ tuplas de cuatro enteros. Finalmente decía: 33 | "Luego de tener el cuadrado coloreado de negro en las secciones pertinentes, su 34 | tarea es invertir el cuadrado a su estado original. En una operación puede seleccionar 35 | un rectángulo y pintar todas sus casillas de blanco. El costo de pintar 36 | de blanco un rectángulo de $h \times w$ es el mínimo entre $h$ y $w$. Encuentre el costo 37 | mínimo para pintar de blanco todo el cuadrado." 38 | 39 | En unos 10 minutos Maykol fue capaz de resolver el problema. Desgraciadamente 40 | esto no es una película y el problema de Maykol no era un problema 41 | del milenio que lo volviera millonario. Pero, ¿sería usted capaz de resolverlo 42 | también? 43 | 44 | ## El secreto de la Isla 45 | 46 | En el corazón del vasto océano azul, existe una isla tropical conocida como La Isla de Coba, un lugar de exuberante vegetación y antigua sabiduría. La tribu que habita en esta isla ha vivido en armonía con la naturaleza durante siglos, guiados por un consejo de ancianos que custodian el equilibrio entre los habitantes de la isla y sus recursos. 47 | 48 | Sin embargo, una nueva generación de líderes debe ser elegida, y para ello, los ancianos han planteado un desafío ancestral. Los aspirantes al consejo deben descubrir un grupo selecto de **guardianes**, quienes, colocados en puntos estratégicos de la isla, podrían vigilar a todos los aldeanos sin dejar a ninguno sin supervisión directa o indirecta. 49 | 50 | La isla tiene una serie de aldeas unidas entre ellas por caminos. El reto es encontrar un grupo de guardianes tan pequeño como sea posible, de modo que cada aldea esté bajo la protección directa de un guardián, o al menos, esté conectada a una aldea donde se haya asignado un guardián. 51 | 52 | Los jóvenes líderes deben resolver este desafío para mostrar su valía. Con cada nueva selección de guardianes, la estabilidad de la isla se estremece. El futuro de La Isla de Coba depende de que uno de los jóvenes (como tú) encuentre esta distribución óptima de guardianes y se convierta en el próximo jefe absoluto. 53 | -------------------------------------------------------------------------------- /Proyectos/old/2024/asignación/Ovidio,Jesús,Juan.md: -------------------------------------------------------------------------------- 1 | # Problemas 2 | 3 | ## Criminal y policías 4 | 5 | Ovidio es un criminal buscado, y $N$ policías están dispuestos a atraparlo. Los oficiales quieren capturar a Ovidio sin importar el costo, y Ovidio también quiere eliminar a la mayor cantidad de oficiales posible (preferentemente a todos) antes de ser atrapado (o antes de escapar después de eliminarlos a todos). Ni los oficiales ni Ovidio se retirarán antes de lograr sus objetivos. 6 | 7 | Ovidio y los oficiales están en una cuadrícula unidimensional con coordenadas que van desde $-10^{10}$ hasta $10^{10}$. Ovidio está inicialmente en la coordenada $C$, y el $i$-ésimo oficial está inicialmente en la coordenada $P_i$. Los oficiales y Ovidio luego se turnan para moverse, siendo el equipo de oficiales el que se mueve primero. 8 | 9 | Durante su turno, los oficiales tendrán que moverse a una celda adyacente desocupada uno por uno, en el orden que prefieran. Cada oficial tendrá que moverse. En cada momento del tiempo, ningún oficial puede estar en la misma celda que otro oficial, y tampoco puede estar en la misma celda que Ovidio. Si un oficial no puede moverse a una celda adyacente desocupada, será eliminado (y la celda en la que estaba se desocupa). Es importante notar que el equipo de oficiales intentará moverse de tal manera que se eliminen la menor cantidad posible de oficiales. Por ejemplo, con $P = [2, 3, 4]$ y $C = 6$, las siguientes posiciones posibles de los oficiales pueden ser $[1, 2, 3]$, $[1, 2, 5]$, $[1, 4, 5]$, o $[3, 4, 5]$. Sin embargo, con $P = [2, 3, 4]$ y $C = 5$, el único conjunto posible de las siguientes posiciones de los oficiales es $[1, 2, 3]$. 10 | 11 | Después del turno del equipo de oficiales, Ovidio también se mueve a una celda adyacente desocupada o es atrapado si no puede encontrar ninguna celda adyacente desocupada. El proceso se repite hasta que Ovidio es atrapado o todos los oficiales son eliminados y Ovidio escapa. 12 | 13 | Debes encontrar el número máximo de oficiales que pueden ser eliminados por Ovidio, y si Ovidio puede escapar o no. 14 | 15 | Como recordatorio, dos celdas con coordenadas $X$ y $Y$ son adyacentes si y solo si $|X - Y| = 1$. 16 | 17 | ## El secreto de la Isla 18 | 19 | En el corazón del vasto océano azul, existe una isla tropical conocida como La Isla de Coba, un lugar de exuberante vegetación y antigua sabiduría. La tribu que habita en esta isla ha vivido en armonía con la naturaleza durante siglos, guiados por un consejo de ancianos que custodian el equilibrio entre los habitantes de la isla y sus recursos. 20 | 21 | Sin embargo, una nueva generación de líderes debe ser elegida, y para ello, los ancianos han planteado un desafío ancestral. Los aspirantes al consejo deben descubrir un grupo selecto de **guardianes**, quienes, colocados en puntos estratégicos de la isla, podrían vigilar a todos los aldeanos sin dejar a ninguno sin supervisión directa o indirecta. 22 | 23 | La isla tiene una serie de aldeas unidas entre ellas por caminos. El reto es encontrar un grupo de guardianes tan pequeño como sea posible, de modo que cada aldea esté bajo la protección directa de un guardián, o al menos, esté conectada a una aldea donde se haya asignado un guardián. 24 | 25 | Los jóvenes líderes deben resolver este desafío para mostrar su valía. Con cada nueva selección de guardianes, la estabilidad de la isla se estremece. El futuro de La Isla de Coba depende de que uno de los jóvenes (como tú) encuentre esta distribución óptima de guardianes y se convierta en el próximo jefe absoluto. 26 | 27 | ## Ciudades 28 | 29 | El país de Coba ha evolucionado, ahora tiene inicialmente $N$ ciudades aisladas, donde la $i$-ésima ciudad tiene una significancia de $A_i$. El Anciano jefe de Coba quiere conectar todas las ciudades. Él puede construir una carretera bidireccional de longitud $L$ $(L > 0)$ desde la ciudad $X$ a la ciudad $Y$ si $(A_X \& A_Y \& L) = L$, donde $ \& $ representa el operador AND bit a bit. 30 | 31 | ¿Cuál es la longitud total mínima de las carreteras que tiene que construir para conectar todas las ciudades en Coba? Imprime $-1$ si es imposible. 32 | 33 | Nota: 34 | 35 | Se dice que la ciudad $X$ y la ciudad $Y$ están conectadas si existe una secuencia de ciudades $C_1, C_2, \dots, C_K$ $(K \geq 1)$ tal que $C_1 = X$, $C_K = Y$, y existe una carretera desde $C_i$ a $C_{i+1}$ $(1 \leq i < K)$. Todas las ciudades en Coba se dicen conectadas cuando cada par de ciudades en Coba está conectado. 36 | -------------------------------------------------------------------------------- /Proyectos/old/2024/asignación/lidier,eduardo,josé.md: -------------------------------------------------------------------------------- 1 | # Problemas 2 | 3 | ## Corrupción 4 | 5 | Han pasado 20 años desde que Lidier se graduó de Ciencias de la Computación 6 | (haciendo una muy buena tesis) y las vueltas de la vida lo llevaron a convertirse 7 | en el presidente del Partido Comunista de Cuba. Una de sus muchas responsabilidades 8 | consiste en visitar zonas remotas. En esta ocasión debe visitar una 9 | ciudad campestre de Pinar del Río. 10 | 11 | También han pasado 20 años desde que Marié consiguió su título en MATCOM. 12 | Tras años de viaje por las grandes metrópolis del mundo, en algún punto 13 | decidió que prefería vivir una vida tranquila, aislada de la urbanización, en una 14 | tranquila ciudad de Pinar del Río. Las vueltas de la vida quisieron que precisamente 15 | Marié fuera la única universitaria habitando la ciudad que Lidier se 16 | dispone a visitar. 17 | 18 | Los habitantes de la zona entraron en pánico ante la visita de una figura tan 19 | importante y decidieron reparar las calles de la ciudad por las que transitaría 20 | Lidier. El problema está en que nadie sabía qué ruta tomaría el presidente y 21 | decidieron pedirle ayuda a Marié. 22 | 23 | La ciudad tiene $n$ puntos importantes, unidos entre sí por calles cuyos 24 | tamaños se conoce. Se sabe que Lidier comenzará en alguno de esos puntos 25 | ($s$) y terminará el viaje en otro ($t$). Los ciudadanos quieren saber, para 26 | cada par $s$, $t$, cuántas calles participan en algún camino de distancia mínima 27 | entre $s$ y $t$. 28 | 29 | ## Banco 30 | 31 | Eduardo es el gerente principal de un gran banco. Tiene acceso ilimitado al sistema de bases de datos del banco y, con unos pocos clics, puede mover cualquier cantidad de dinero de las reservas del banco a su propia cuenta privada. Sin embargo, el banco utiliza un sofisticado sistema de detección de fraude impulsado por IA, lo que hace que robar sea más difícil. 32 | 33 | Eduardo sabe que el sistema antifraude detecta cualquier operación que supere un límite fijo de M euros, y estas operaciones son verificadas manualmente por un número de empleados. Por lo tanto, cualquier operación fraudulenta que exceda este límite es detectada, mientras que cualquier operación menor pasa desapercibida. 34 | 35 | Eduardo no conoce el límite M y quiere descubrirlo. En una operación, puede elegir un número entero X y tratar de mover X euros de las reservas del banco a su propia cuenta. Luego, ocurre lo siguiente. 36 | 37 | Si X≤M, la operación pasa desapercibida y el saldo de la cuenta de Eduardo aumenta en X euros. 38 | De lo contrario, si X>M, se detecta el fraude y se cancela la operación. Además, Eduardo debe pagar X euros de su propia cuenta como multa. Si tiene menos de X euros en la cuenta, es despedido y llevado a la policía. 39 | Inicialmente, Eduardo tiene 1 euro en su cuenta. Ayúdalo a encontrar el valor exacto de M en no más de 105 operaciones sin que sea despedido. 40 | 41 | Entrada: 42 | Cada prueba contiene múltiples casos de prueba. La primera línea contiene el número de casos de prueba t (1≤t≤1000). 43 | 44 | Para cada caso de prueba, no hay entrada previa a la primera consulta, pero puedes estar seguro de que M es un número entero y 0≤M≤1014. 45 | 46 | Salida: 47 | Para cada caso de prueba, cuando sepas el valor exacto de M, imprime una única línea con el formato "! M". Después de eso, tu programa debe proceder al siguiente caso de prueba o terminar, si es el último. 48 | 49 | ## Rompiendo amistades 50 | 51 | Por algún motivo, a José no le gustaba la paz y le irritaba que sus compañeros de aula se llevaran tan bien. Él quería ver 52 | el mundo arder. Un día un demonio se le acercó y le propuso un trato: "A cambio de un cachito de tu alma, te voy a dar el poder para 53 | romper relaciones de amistad de tus compañeros, con la única condición de que no puedes romperlas todas". Sin pensarlo mucho (Qué más 54 | da un pequeño trocito de alma), José aceptó y se puso a trabajar. Él conocía, dados sus k compañeros de aula, quiénes eran mutuamente 55 | amigos. 56 | 57 | Como no podía eliminar todas las relaciones de amistad, pensó en qué era lo siguiente que podía hacer más daño. Si una persona quedaba con 58 | uno o dos amigos, podría hacer proyectos en parejas o tríos (casi todos los de la carrera son así), pero si tenía exactamente tres amigos, 59 | cuando llegara un proyecto de tres personas, uno de sus amigos debería quedar afuera y se formaría el caos. 60 | 61 | Ayude a José a saber si puede sembrar la discordia en su aula eliminando relaciones de amistad entre sus compañeros de forma que todos queden, o bien sin amigos, o con exactamente tres amigos. 62 | -------------------------------------------------------------------------------- /Proyectos/old/2024/distribución.md: -------------------------------------------------------------------------------- 1 | # Distribución 2 | 3 | ## Individuales 4 | 5 | - Nahomi @BbBored + 6 | - Karen Dianelis @Karen_dcl + 7 | - Loitzel @MutantShrimp + 8 | - Marcos @MarcosHCK + 9 | - Amanda @anhoris + 10 | - Eric @EricTornas + 11 | - Hector @hectormi + 12 | - Juan Miguel Pérez + 13 | - Luis Alejandro Rodriguez Otero @Drackaro + 14 | - Carla Sunami @carlapvalera + 15 | - Raudel Alejandro Gómez Molina @RaudelAlejandro + 16 | - Francisco Suarez @Francisco07 + 17 | - Leonardo Javier Ramirez @c1ber_b0y + 18 | - Naomi Lahera Champagne @nao_lahera + 19 | 20 | ## Equipos 21 | 22 | - Lidier @LittleArmin, Eduardo García @egmaleta, José Luis Leyva @josee_lu 23 | - Alejandro Yero @IronBeardX, María de Lourdes @ml_chony, Leismael Sosa @sosaCode 24 | - Alejandro Camacho @AlejoCp00, Yisell Martínez @yisell01, Sebastián Suárez @Sebas_Suarez 25 | - Alex Sánchez Sáez @Nadie001, Carlos Manuel, Jorge Alberto @jaspio 26 | - Marco Antonio @MarcoAOT01, Yoan René @YoanRene, Kevin Majím @Kevin_majim 27 | - Claudia Alvarez @clau_alvarez01, Roger Moreno @RogerMo01, Jan Carlos @jcarlospg00 28 | - Alfredo Montero López @alfre_montero, Leonardo Amaro Rodríguez @LeoAmaro01, Anthuan Montes de Oca @Nuebe 29 | - Jose Miguel Pérez @JoseMiguelPerezPerez, Yonatan José Guerras @Yonyuk, David Cabrera @ghostlol99 30 | - Ovidio Navarro @ovidionavarro01 , Jesús Armando Padrón @Armando0101 , Juan José Muñoz @Cusco44 31 | - Alex Sierra Alcala @alexsierra45, Juan Carlos Espinosa Delgado, Javier @J_RodriguezS 32 | - Daniel Abad Fundora @danAbf01, Anabel Benitez Gonzalez @anabelb46, Enzo Rojas D'Toste @Enzo_noseqponer 33 | - Maykol Luis Martinez Rodriguez @Ungenugend, Brian Ameht Inclan Quesada @brian_iq, Davier Sanchez Bello @DavierSanBell 34 | - Lázaro David Alba @davidalba01, Jose Carlos Pendas @jcpendas, Max Bengochea @humantoilet1 35 | - Ana Karla Caballero @Akarly99, Diana Laura Pérez, Carlos Arturo 36 | -------------------------------------------------------------------------------- /Proyectos/old/2024/first-ex-statements/BS-Dp-Banco.md: -------------------------------------------------------------------------------- 1 | # DP 2 | 3 | ## Banco 4 | 5 | Gustaw es el gerente principal de un gran banco. Tiene acceso ilimitado al sistema de bases de datos del banco y, con unos pocos clics, puede mover cualquier cantidad de dinero de las reservas del banco a su propia cuenta privada. Sin embargo, el banco utiliza un sofisticado sistema de detección de fraude impulsado por IA, lo que hace que robar sea más difícil. 6 | 7 | Gustaw sabe que el sistema antifraude detecta cualquier operación que supere un límite fijo de M euros, y estas operaciones son verificadas manualmente por un número de empleados. Por lo tanto, cualquier operación fraudulenta que exceda este límite es detectada, mientras que cualquier operación menor pasa desapercibida. 8 | 9 | Gustaw no conoce el límite M y quiere descubrirlo. En una operación, puede elegir un número entero X y tratar de mover X euros de las reservas del banco a su propia cuenta. Luego, ocurre lo siguiente. 10 | 11 | Si X≤M, la operación pasa desapercibida y el saldo de la cuenta de Gustaw aumenta en X euros. 12 | De lo contrario, si X>M, se detecta el fraude y se cancela la operación. Además, Gustaw debe pagar X euros de su propia cuenta como multa. Si tiene menos de X euros en la cuenta, es despedido y llevado a la policía. 13 | Inicialmente, Gustaw tiene 1 euro en su cuenta. Ayúdalo a encontrar el valor exacto de M en no más de 105 operaciones sin que sea despedido. 14 | 15 | Entrada: 16 | Cada prueba contiene múltiples casos de prueba. La primera línea contiene el número de casos de prueba t (1≤t≤1000). 17 | 18 | Para cada caso de prueba, no hay entrada previa a la primera consulta, pero puedes estar seguro de que M es un número entero y 0≤M≤1014. 19 | 20 | Salida: 21 | Para cada caso de prueba, cuando sepas el valor exacto de M, imprime una única línea con el formato "! M". Después de eso, tu programa debe proceder al siguiente caso de prueba o terminar, si es el último. 22 | 23 | ### Statement 24 | 25 | Un sistema antifraude detecta cualquier operación mayor a un límite M fijo. 26 | 27 | Se desconoce el valor de M y se pueden realizar operaciones moviendo una cantidad X de euros. Si X≤M, la operación no es detectada y el saldo aumenta en X euros. Si X>M, el fraude es detectado, la operación es cancelada y se debe pagar X euros. Si el saldo es menor a X euros, ocurre el despido y se reporta a la policía. 28 | 29 | Se comienza con 1 euro en la cuenta. Se deben realizar no más de 105 operaciones para encontrar el valor exacto de M. 30 | 31 | entrada: 32 | Múltiples casos de prueba con número de casos t (1≤t≤1000). No hay entrada previa, pero M es un número entero con 0≤M≤1014. 33 | 34 | salida: 35 | Imprimir "! M" cuando se sepa el valor exacto de M. 36 | 37 | ### Solution 38 | 39 | Nuestra solución consta de dos partes. Primero, encontrar un límite superior para $M$. Para lograr esto, intentamos consultar $1$, $2$, $4$, $8$, y así sucesivamente hasta que fallemos. Después de la primera consulta fallida, tendremos $0$ euros y sabremos que la respuesta está en algún segmento $[2^k, 2^{k+1})$. Esto toma como máximo $47$ consultas. 40 | 41 | Ahora uno podría hacer algo como la siguiente búsqueda binaria: tomar el borde izquierdo de nuestro segmento de dinero, luego en cada consulta intentar el borde izquierdo y luego el medio. Si las consultas son exitosas, todo bien, de lo contrario perdemos $\frac{L + R - L}{2}$, donde $L$ se toma al principio de esta iteración, y todo $\frac{R - L}{2}$ no puede sumar algo mayor que el borde izquierdo inicial que obtuvimos, porque inicialmente $R - L = L$, y cada vez que $R - L$ disminuye a la mitad. Sin embargo, esta solución requiere otras $2\log(10^{14})$ consultas, lo cual es demasiado. 42 | 43 | Dividamos el segmento en dos partes desiguales a veces. Nota que si el lado izquierdo de la partición no excede la mitad del segmento, entonces ese extra $L$ que tenemos es suficiente para cubrir todos nuestros gastos. También usemos que de hecho obtenemos un extra $M \approx \frac{L + R}{2}$ después de consultas medias exitosas. 44 | 45 | Queremos que nuestro algoritmo se vea como lo siguiente. Sea el segmento actual igual a $[l, r]$ y el saldo actual sea al menos $l \cdot y + (r - l)$ para algún entero $y$. Entonces, si $y = 0$, consultamos $l$, y si $y > 1$, consultamos lo que queramos en el segmento. Es fácil ver que después de una consulta fallida nuestro saldo es al menos $l \cdot (y - 1) + (r - l)$ (para nuevos $l$ y $r$), y después de una consulta exitosa, pensaremos que nuestro saldo es al menos $l \cdot (y + 1) + (r - l)$ (para nuevos $l$ o $r$). Lo último no siempre es el caso, lo discutiremos más adelante. 46 | 47 | Ahora nuestro saldo se describe por el único entero $y$. Sea $dp[x][y]$ igual al máximo $d$ para que sea posible encontrar la respuesta en $[l, l + d]$ teniendo $y \cdot l + d$ dinero inicialmente. Entonces $dp[x][y] = dp[x - 1][y - 1] + dp[x - 1][y + 1]$, es fácil de calcular y seguir en la solución. Se puede demostrar que $dp[k][0] = \binom{k}{k / 2}$. Esto implica que $k \leq 49$. Esto suma hasta $97$ consultas. 48 | 49 | Ahora recuerda que, si procedemos de $(l, r, y)$ a $(m, r, y + 1)$, entonces nuestro saldo era $y \cdot l + (r - l)$ y se convirtió en $y \cdot l + m$, mientras que necesitamos $(y + 1) \cdot m$ para nuestras estimaciones. Por lo tanto, necesitamos algo de dinero extra para cubrir tales "gastos". Se puede probar que no exceden tres de los $L$ iniciales, lo que da un total de $100$ consultas. 50 | -------------------------------------------------------------------------------- /Proyectos/old/2024/first-ex-statements/BS-Dp-Poligono.md: -------------------------------------------------------------------------------- 1 | # DP 2 | 3 | ## Plígono 4 | 5 | En un reino lejano, existía un mago llamado Héctor que protegía un gran tesoro escondido dentro de un castillo mágico. Este castillo tenía la forma de un polígono perfecto y estrictamente convexo con $n$ torres, cada una conectada por paredes fuertes e inquebrantables. 6 | 7 | La reina María que creía firmemente en las ideas de la Revolución (¿Cuál? no sé, la revolución mágica del reino lejano) decidió que era hora de compartir parte del tesoro con el pueblo, pero debía hacerlo con cuidado para no despertar la ira de Héctor. La reina María llamó a los mejores arquitectos del reino y les pidió que hicieran $k$ cortes en las paredes del castillo, utilizando portales mágicos que conectaran dos torres distintas que no estuvieran directamente adyacentes. Sin embargo, había una advertencia: los portales no podían cruzarse en medio de las paredes, solo en las torres del castillo. 8 | 9 | El objetivo de la reina María era repartir las riquezas de tal manera que cada porción de territorio dentro del castillo fuera lo más equitativa posible. Así, pidió a los arquitectos que maximizaran el área de la porción más pequeña que se formara dentro del castillo después de colocar los $k$ portales mágicos. 10 | 11 | Tu tarea es ayudar a la reina María a encontrar la mejor manera de cortar el castillo para que la distribución del tesoro sea justa para todos. 12 | 13 | (PD: Cuando Héctor regresó a su castillo y lo vio todo cuarteado, en un ataque de ira convocó a la bestia mágica Yesapin, pero eso es historia para otro momento) 14 | 15 | ### Statement 16 | 17 | Se te da un polígono estrictamente convexo con $n$ vértices. 18 | 19 | Realizarás $k$ cortes que cumplan con las siguientes condiciones: 20 | 21 | - cada corte es un segmento que conecta dos vértices diferentes no adyacentes; 22 | - dos cortes solo pueden intersectarse en los vértices del polígono. 23 | 24 | Tu tarea es maximizar el área de la región más pequeña que se formará por el polígono y esos $k$ cortes. 25 | 26 | ### Solution 27 | 28 | Vamos a buscar la respuesta usando búsqueda binaria. 29 | 30 | Supongamos que queremos verificar si podemos obtener $k+1$ regiones con un área de al menos $w$. A partir de ahora, un corte correcto significa un corte que separará una región con un área de al menos $w$. 31 | 32 | Consideremos un intervalo de vértices $(i,j)$. Vamos a separarlo virtualmente usando un corte desde $i$ hasta $j$. Nos gustaría saber cuántas regiones correctas podemos obtener realizando cortes solo en este intervalo. El área junto al corte virtual se considera un sobrante. Dado un conjunto de cortes correctos en este intervalo, siempre es óptimo elegir el conjunto con más cortes, y si tienen la misma cantidad de cortes, el que tenga el sobrante más grande. 33 | 34 | Esta observación nos lleva a una solución de programación dinámica. Sea $dp_{i,j}$ un par $(r_{i,j}, l_{i,j})$ donde $r_{i,j}$ representa la mayor cantidad de regiones y $l_{i,j}$ el mayor sobrante que podemos obtener al realizar cortes en el intervalo $(i,j)$. 35 | 36 | Para calcular este $dp$, iteraremos sobre todos los vértices $k$ tal que $i < k < j$ y consideraremos el vértice $k$ como uno de los vértices incluidos en la región sobrante. Esta es una transición simple desde los estados $dp_{i,k}$ y $dp_{k,j}$. Después de calcular nuestro estado $dp$, podemos cortar este intervalo de manera segura si $l_{i,j} \geq w$. 37 | 38 | Si y solo si $r_{1,n} \geq k+1$, la respuesta es al menos $w$. 39 | 40 | COMPLEJIDAD TEMPORAL: 41 | $O(n^3 \log(10^{16}))$. 42 | -------------------------------------------------------------------------------- /Proyectos/old/2024/first-ex-statements/BS-Minecraft.md: -------------------------------------------------------------------------------- 1 | # DP 2 | 3 | ## Minecraft 4 | 5 | En el juego de MineCraft una de las principales distracciones es la construccion, los mejores jugadores logran hacer monumentos imponentes que sorprenden a todos. Actualmente se esta llevando a cabo un torneo de construcción en el juego, donde la tarea es hacer un muro. Un muro es, como sabemos, una ilera de columnas de bloques de piedra, todos de la misma altura. En MineCraft, para llevar a cabo esta tarea hay 3 movimientos válidos: 6 | 7 | - sacar un bloque de piedra del inventario y aumentar la altura de la columna en cuestion en 1 de altura 8 | - destruir un bloque de piedra de una columna y disminuir la altura de la columna en cuestion en 1 de altura 9 | - mover un bloque de piedra de una columna a otra, aumentando la altura de la 2da columna y disminuyendo la de la 1ra en 1 de altura cada una. 10 | 11 | Se sabe que hacer cada movimiento consume c, d y m de energia respectivamente, y que en los inventarios de los jugadores hay suficienues bloques de piedra siempre. Los jugadores comienzan a jugar con un muro a medio hacer aleatorio, osea, se les da una cantidad n de columnas de bloques de piedra en ilera, de disímiles tamaños y el ganador del torneo será el que construya un muro de largo n utilizando la menor cantidad de energia, no se permite crear columnas nuevas ni dejar huecos de antiguas columnas en el muro porsupuesto. 12 | 13 | Elabore una estrategia que asegure que para cualquier muro inicial a medio hacer con que comience, usted logrará hacer el muro pedido utilizando la menor cantidad de energia posible. 14 | 15 | ### Statement 16 | 17 | Dado que la pared consiste en $N$ pilares de ladrillos, donde la altura del $i$-ésimo pilar es inicialmente igual a $h_i$, y todas las alturas de los $N$ pilares deben ser iguales después de la restauración: 18 | 19 | Se permiten las siguientes operaciones: 20 | 21 | - Colocar un ladrillo en la parte superior de un pilar, con un costo de $A$. 22 | - Quitar un ladrillo de la parte superior de un pilar no vacío, con un costo de $R$. 23 | - Mover un ladrillo de la parte superior de un pilar no vacío a la parte superior de otro pilar, con un costo de $M$. 24 | 25 | No puedes crear pilares adicionales ni ignorar algunos de los pilares preexistentes, incluso si su altura se reduce a 0. 26 | 27 | Determina el costo total mínimo para hacer que todos los pilares tengan la misma altura. 28 | 29 | ### Solution 30 | 31 | Primero, hagamos $M = \min(M, A + R)$ — esto es cierto ya que podemos emular el movimiento agregando y removiendo. Después de eso, nunca será rentable agregar y remover en una misma solución, ya que siempre podemos mover en su lugar. 32 | 33 | Supongamos que hemos fijado $H$ — la altura resultante para todos los pilares. ¿Cómo podemos calcular el costo mínimo para un valor dado de $H$? Algunos pilares tienen como máximo $H$ ladrillos, denotemos el número total de ladrillos faltantes en estos pilares como $P$. Otros pilares tienen como mínimo $H$ ladrillos, denotemos el número total de ladrillos extra en estos pilares como $Q$. Si $P \geq Q$, entonces nos faltan $(P - Q)$ ladrillos en total, por lo que debemos realizar $(P - Q)$ adiciones. No habrá más adiciones o remociones, y tenemos que hacer al menos $Q$ movimientos ya que de alguna manera debemos deshacernos de los ladrillos extra de aquellos pilares que inicialmente tienen más de $H$ ladrillos. Está claro que $Q$ movimientos son suficientes. Por lo tanto, el costo total será $C = A(P - Q) + MQ$. De manera similar, si $Q \geq P$, entonces el costo total será $C = R(Q - P) + MP$. 34 | 35 | Supongamos ahora que $P \geq Q$. Tenemos exactamente $X$ pilares con como máximo $H$ ladrillos y exactamente $N - X$ pilares con estrictamente más de $H$ ladrillos. Intentemos incrementar $H$ en 1 y ver cómo cambiará el costo total. $P' = P + X$, $Q' = Q - (N - X) = Q - N + X$. $C' = A(P' - Q') + MQ' = A(P + X - Q + N - X) + M(Q - N + X) = A(P - Q) + MQ + AN - M(N - X)$. Podemos ver que el costo total ha cambiado en $AN - M(N - X)$. Mientras $X$ sea constante, el cambio de costo será constante. ¿Cuáles son los momentos en los que $X$ cambia? Cuando $H$ es igual a la altura inicial de algún pilar. Por lo tanto, el costo como función de $H$ es lineal por tramos con puntos de ruptura correspondientes a las alturas iniciales. 36 | 37 | Hay un matiz — hemos asumido $P \geq Q$. Lo mismo será cierto para $P \leq Q$, pero puede haber puntos de ruptura adicionales cuando cambiamos entre estos dos estados. Este cambio ocurrirá solo una vez para $H ≈ \sum h_i / N$ (la igualdad aproximada aquí significa que este punto puede no ser entero, por lo que deberíamos agregar tanto $\lfloor \sum h_i / N \rfloor$ como $\lceil \sum h_i / N \rceil$ como puntos de ruptura). 38 | 39 | Los mínimos de la función lineal por tramos están en los puntos de ruptura, por lo que basta con calcular el costo en los puntos de ruptura (las alturas iniciales y $H ≈ \sum h_i / N$) y elegir el mínimo de ellos. 40 | 41 | Para calcular el costo para un valor dado de $H$ rápidamente, podemos ordenar las alturas iniciales y calcular las sumas prefixadas de las alturas. Luego, utilizando búsqueda binaria, podemos determinar qué pilares tienen altura menor que $H$ y mayor que $H$, y luego calcular $P$ y $Q$ usando las sumas prefixadas. Podemos usar dos punteros en lugar de búsquedas binarias, pero esto no mejorará la complejidad total, que es $O(N \log N)$ debido a la ordenación (y búsquedas binarias si las estamos usando). 42 | 43 | COMPLEJIDAD TEMPORAL: 44 | $O(N \log N)$ 45 | -------------------------------------------------------------------------------- /Proyectos/old/2024/first-ex-statements/BS-greedy-Torneo.md: -------------------------------------------------------------------------------- 1 | # DP 2 | 3 | ## Torneo 4 | 5 | Tan pronto como comienza el toreno de programación competitiva, tu experimentado equipo de $3$ personas se da cuenta inmediatamente de que este presenta $a$ problemas fáciles, $b$ problemas medianos, y $c$ problemas difíciles. Resolver un problema les tomará a cualquiera de ustedes $2$, $3$ o $4$ unidades de tiempo, dependiendo de si el problema es fácil, mediano o difícil. Independientemente de la dificultad del problema, la última unidad de tiempo gastada en resolverlo debe gastarse utilizando la computadora compartida. 6 | 7 | Tu equipo organiza sus esfuerzos de manera que cada uno de ustedes comienza (y termina) resolviendo problemas en unidades de tiempo enteras. Cualquier problema dado solo puede ser resuelto por un concursante; requiere una cantidad continua de tiempo (que depende de la dificultad del problema). Ninguno de los $3$ puede resolver más de un problema a la vez, pero pueden comenzar a resolver un nuevo problema inmediatamente después de terminar uno. De manera similar, la computadora compartida no puede ser utilizada por más de uno de ustedes al mismo tiempo, pero cualquiera de ustedes puede comenzar a usar la computadora (para completar el problema que se está resolviendo actualmente) inmediatamente después de que alguien más deje de usarla. 8 | 9 | Dado que el concurso dura $l$ unidades de tiempo, encuentra el número máximo de problemas que tu equipo puede resolver. Además, encuentra una forma de resolver el número máximo de problemas. 10 | 11 | ### Statement 12 | 13 | Dado un concurso que dura $l$ unidades de tiempo, un equipo de $3$ personas debe resolver $a$ problemas fáciles, $b$ problemas medianos, y $c$ problemas difíciles. Resolver un problema fácil toma $2$ unidades de tiempo, uno mediano toma $3$ unidades de tiempo, y uno difícil toma $4$ unidades de tiempo. Todos los problemas deben ser finalizados utilizando una computadora compartida en la última unidad de tiempo dedicada a ese problema. 14 | 15 | Cada miembro del equipo puede resolver problemas en unidades de tiempo enteras, y ningún miembro puede resolver más de un problema a la vez. La computadora compartida solo puede ser utilizada por un miembro del equipo a la vez, pero cualquier miembro puede comenzar a usarla inmediatamente después de que otro miembro la deje de usar. 16 | 17 | El objetivo es encontrar el número máximo de problemas que el equipo puede resolver en $l$ unidades de tiempo, y una manera de resolver dicho número máximo de problemas. 18 | 19 | ### Solution 20 | 21 | Para comenzar, determinamos si es posible resolver $a$ problemas fáciles, $b$ problemas medianos y $c$ problemas difíciles en un concurso que dura $l$ unidades de tiempo. Una vez que somos capaces de hacer esto, es fácil encontrar el número óptimo de problemas que se pueden resolver; lo haremos en la sección "Solución completa" más abajo. 22 | 23 | Vamos a (no, que lo hagan ellos) demostrar que es posible resolver $a$ problemas fáciles, $b$ problemas medianos y $c$ problemas difíciles si y solo si se cumplen las siguientes dos restricciones: 24 | 25 | 1. $l \geq a + b + c +$ 26 | $$ 27 | \begin{cases} 28 | 0 & \text{si } a = b = c = 0 \\ 29 | 1 & \text{si } a \geq 1 \\ 30 | 2 & \text{si } a = 0 \text{ y al menos uno de } b \text{ y } c \geq 1 \\ 31 | \end{cases} 32 | $$ 33 | 34 | 2. $3l \geq 2a + 3b + 4c +$ 35 | $$ 36 | \begin{cases} 37 | 0 & \text{si } a = b = c = 0 \\ 38 | 3 & \text{si } a, b, c \geq 1 \\ 39 | 4 & \text{si al menos uno de } a, b, c \text{ es } 0 \text{ pero al menos uno de } a \text{ o } b \geq 1 \\ 40 | 6 & \text{si } a = b = 0 \text{ y } c \geq 1 \\ 41 | \end{cases} 42 | $$ 43 | 44 | Regresemos ahora a la tarea original, que nos requiere determinar el número máximo de problemas $n$ que se pueden resolver en el tiempo $l$. Para hacerlo, realizamos una búsqueda binaria sobre $n$ en el intervalo $[0, a + b + c]$. Para un valor candidato dado de $n$, decidimos de manera greedy los tipos de problemas a resolver: primero hasta $a$ problemas fáciles, luego hasta $b$ problemas medianos, y finalmente hasta $c$ problemas difíciles, hasta que alcancemos el número total deseado de problemas $n$ (obviamente, no hay ventaja en planear resolver un problema mientras se omite uno estrictamente más fácil). Gracias a las secciones anteriores, Somos capaces de determinar en $O(1)$ tiempo si es posible resolver los $n$ problemas elegidos. Una vez que se encuentra el valor óptimo de $n$, podemos imprimir una estrategia explícita en $O(n)$ tiempo. En general, la complejidad de esta solución es $O(\log(a + b + c) + n)$. 45 | 46 | Para determinar si es posible resolver los $n$ problemas elegidos, también podemos construir de manera greedy una estrategia óptima y verificar si toma como máximo $l$ unidades de tiempo. Dicha solución no se basa explícitamente en verificar las restricciones (1) y (2). 47 | -------------------------------------------------------------------------------- /Proyectos/old/2024/first-ex-statements/DP-Dos-contadores.md: -------------------------------------------------------------------------------- 1 | # DP 2 | 3 | ## Dos contadores 4 | 5 | Tienes $2$ contadores $a$ y $b$, ambos inicializados en $0$. También tienes un puntaje inicializado en $0$. 6 | 7 | Al inicio de cada minuto, desde el minuto $1$ hasta el minuto $N$, debes incrementar ya sea $a$ o $b$ en $1$. 8 | 9 | Adicionalmente, hay $M$ eventos. El evento $i$ ocurre en el minuto $T_i + 0.5$ y tiene tipo $C_i$ $(C_i \in \{1, 2\})$. 10 | 11 | En cada evento, los contadores o el puntaje se actualizan de la siguiente manera: 12 | 13 | ```cpp 14 | if (type == 1): 15 | if (a > b): 16 | score = score + 1; 17 | else: 18 | a = 0; 19 | b = 0; 20 | else: 21 | if (a < b): 22 | score = score + 1; 23 | else: 24 | a = 0; 25 | b = 0; 26 | ``` 27 | 28 | Tu tarea es maximizar el puntaje después de que hayan pasado $N$ minutos. 29 | 30 | ### Statement 31 | 32 | Tienes dos contadores $a$ y $b$ y un puntaje $S$, todos inicialmente en $0$. 33 | Durante $N$ minutos, necesitas incrementar $a$ o $b$ en $1$. 34 | También hay $M$ eventos, cada uno de dos tipos: 35 | 36 | - Un evento de tipo $1$ incrementa $S$ en $1$ si $a > b$, y establece $a = b = 0$ de lo contrario. 37 | - Un evento de tipo $2$ incrementa $S$ en $1$ si $a < b$, y establece $a = b = 0$ de lo contrario. 38 | 39 | ¿Cuál es el máximo puntaje final posible que puedes lograr? 40 | 41 | ### Solution 42 | 43 | Sea $d = a - b$ la diferencia entre $a$ y $b$. 44 | Note que cada evento verifica si la diferencia es positiva o negativa, luego incrementa el puntaje en $1$ o reinicia $d$ a $0$. 45 | 46 | Además, en cada minuto, podemos aumentar o disminuir $d$ en $1$. 47 | 48 | Idealmente, queremos mantener $d$ lo más cercano posible a $0$, para que podamos cambiar su signo rápidamente si es necesario para un evento. 49 | De hecho, es suficiente mantener $-2 \leq d \leq 2$ en todo momento. 50 | 51 | Prueba 52 | Armados con este conocimiento, resolvamos el problema. 53 | 54 | Usaremos programación dinámica: sea $dp(i, x)$ el puntaje máximo después de $i$ minutos si $d = x$. 55 | Las transiciones son las siguientes: 56 | 57 | Primero, necesitamos aumentar o disminuir $d$ en $1$. Es decir, 58 | $dp(i, x) = \max(dp(i - 1, x - 1), dp(i - 1, x + 1))$. 59 | Luego, necesitamos procesar un evento en este momento, si hay alguno. 60 | Supongamos que hay un evento de tipo $1$. Esto cambia los valores de la siguiente manera: 61 | 62 | - Si $x > 0$, entonces sumamos $1$ a $dp(i, x)$. 63 | - $dp(i, 0) = \max(dp(i, 0), dp(i, -1), dp(i, -2))$, ya que los valores negativos se fuerzan a $0$. 64 | - $dp(i, x) = -\infty$ para $x < 0$, ya que es imposible tener un valor negativo de $d$ después de este minuto. 65 | 66 | Un evento de tipo $2$ se maneja de manera similar. 67 | 68 | Los casos base para esta función son $dp(0, 0) = 0$ y $dp(0, x) = -\infty$ para $x \neq 0$. 69 | La respuesta final es el valor máximo de $dp(N, x)$ para algún $x$. 70 | 71 | Dado que solo importa $-2 \leq x \leq 2$, tenemos $5N$ estados y transiciones $O(1)$ para cada uno, lo que lleva a una solución $O(N)$. 72 | 73 | COMPLEJIDAD TEMPORAL: 74 | $O(N)$ por caso de prueba. 75 | -------------------------------------------------------------------------------- /Proyectos/old/2024/first-ex-statements/DP-Subsecuencia-buena.md: -------------------------------------------------------------------------------- 1 | # DP 2 | 3 | ## Subsecuencia Buena 4 | 5 | Supongamos que tienes un array binario $B$ de longitud $N$. Una secuencia $x_1, x_2, \dots, x_k$ se llama buena con respecto a $B$ si satisface las siguientes condiciones: 6 | 7 | - $1 \leq x_1 < x_2 < \dots < x_k \leq N + 1$ 8 | - Para cada par $(i, j)$ tal que $1 \leq i < j \leq k$, el subarray $B[x_i : x_j - 1]$ contiene $(j - i)$ unos más que ceros. Es decir, si $B[x_i : x_j - 1]$ contiene $c_1$ unos y $c_0$ ceros, entonces se debe cumplir que $c_1 - c_0 = j - i$. 9 | 10 | Aquí, $B[L : R]$ denota el subarray que consiste en los elementos $[B_L, B_{L + 1}, B_{L + 2}, \dots, B_R]$. Nota que, en particular, una secuencia de tamaño $1$ siempre es buena. 11 | 12 | Por ejemplo, supongamos que $B = [0, 1, 1, 0, 1, 1]$. Entonces: 13 | 14 | - La secuencia $[1, 4, 7]$ es una secuencia buena. Los subarrays que necesitan ser revisados son $B[1 : 3]$, $B[1 : 6]$ y $B[4 : 6]$, que todos cumplen con la condición. 15 | - La secuencia $[1, 5]$ no es buena, porque $B[1 : 4] = [0, 1, 1, 0]$ contiene un número igual de ceros y unos (cuando debería contener un $1$ extra). 16 | 17 | Alice le dio a Bob un array binario $A$ de tamaño $N$ y le pidió que encontrara la secuencia más larga que sea buena con respecto a $A$. Ayuda a Bob a encontrar una de estas secuencias. 18 | 19 | Si existen múltiples secuencias más largas posibles, puedes imprimir cualquiera de ellas. 20 | 21 | ### Statement 22 | 23 | Dado un arreglo binario $A$, encuentra la secuencia buena más larga $x_1, x_2, \dots, x_k$ tal que satisface: 24 | 25 | $1 \leq x_1 < x_2 < \dots < x_k \leq N + 1$ 26 | 27 | $A[x_i : x_j - 1]$ contiene un número igual de ceros y unos para cada $i < j$. 28 | 29 | ### Solution 30 | 31 | Primero, note que es suficiente asegurar que $A[x_i : x_{i+1} - 1]$ (es decir, el subarreglo entre elementos consecutivos) satisfaga la condición, es decir, contiene un uno extra. 32 | 33 | Prueba 34 | Esto no es difícil de ver. El subarreglo $A[x_i : x_j - 1]$ se puede pensar como la concatenación de $A[x_i : x_{i+1} - 1], A[x_{i+1} : x_{i+2} - 1], \dots, A[x_{j-1}, x_j - 1]$. Note que hay $j - i$ subarreglos de este tipo. 35 | 36 | Si cada uno de estos contiene un uno extra, por supuesto, todos juntos tendrán exactamente $j - i$ unos extra. 37 | 38 | Ahora, usemos un pequeño truco: reemplace cada $0$ en el arreglo con $-1$. Llamemos al arreglo obtenido de esta manera $B$. Por ejemplo, si $A = [0, 1, 1, 0, 1]$, entonces $B = [-1, 1, 1, -1, 1]$. 39 | 40 | Observe que "A[L:R] contiene un uno extra" se traduce a "B[L:R] tiene una suma de $1$" en el nuevo arreglo, lo cual es mucho más fácil de manejar. 41 | 42 | Dado que estamos tratando con sumas de subarreglos, es natural pensar en sumas prefixadas. Entonces, sea $P_i = B_1 + B_2 + \dots + B_i$ (con $P_0 = 0$) denotando el arreglo de sumas prefixadas de $B$. 43 | 44 | Ahora, para que $B[L:R]$ tenga una suma de $1$, debemos tener $P_R - P_{L-1} = 1$, o $P_R = P_{L-1} + 1$. 45 | 46 | Aplicando esto a la definición de una secuencia buena, vemos que debemos tener $P_{x_{i+1} - 1} = P_{x_i - 1} + 1$ para cada $1 \leq i < k$. En otras palabras, necesitamos elegir una secuencia de índices cuyas sumas prefixadas sean $k, k + 1, k + 2, \dots$ para algún valor de $k$. 47 | 48 | La secuencia buena más larga, por lo tanto, corresponde a la secuencia más larga de sumas prefixadas de esta forma. 49 | 50 | Esto se puede calcular usando programación dinámica. 51 | 52 | Sea $dp_i$ la longitud de la secuencia más larga de sumas prefixadas que termina en la posición $i$ y que satisface la condición anterior. Las transiciones para un índice dado son fáciles de calcular en $O(N)$. Simplemente tenemos $dp_i = 1 + \max(dp_j)$ en todos los $j < i$ tales que $P_j + 1 = P_i$. 53 | 54 | Sin embargo, hacer esta computación $O(N)$ para cada índice es demasiado lento, necesitamos acelerarlo un poco. Esto se puede hacer observando que solo nos importan aquellos índices cuyos valores $P_j$ sean iguales a $P_i - 1$; de hecho, solo nos importa el valor máximo de $dp_j$ entre estos índices. 55 | 56 | Así que, mantengamos otro arreglo $mx$, donde $mx[x]$ es el valor más grande de $dp_i$ en todos los índices $i$ tales que $P_i = x$. Inicialmente, lo inicializamos a todos ceros. 57 | 58 | Luego, para cada $i$ desde $0$ hasta $N$, 59 | 60 | $dp_i = 1 + mx[P_i]$ 61 | 62 | $mx[P_i] = \max(dp_i, mx[P_i])$ 63 | 64 | El elemento máximo de $dp$ es la respuesta final. 65 | 66 | Reconstituir una secuencia válida no es difícil, cuando se realiza el $dp$, se mantiene un enlace al elemento anterior en la secuencia, luego se siguen estos en reversa al final. 67 | 68 | COMPLEJIDAD TEMPORAL: 69 | 70 | $O(N)$ por caso de prueba. 71 | -------------------------------------------------------------------------------- /Proyectos/old/2024/first-ex-statements/DP-Tramposo.md: -------------------------------------------------------------------------------- 1 | # DP 2 | 3 | ## Tramposo 4 | 5 | Tito está pasando un curso de Diseño y Análisis de Algoritmos. Este año, por primera vez en la historia, los profesores han decidido evaluar el curso mediante un examen final y Tito se ha dado cuenta de que, a grandes rasgos, está frito. A pesar de ser un poco barco, es de hecho un muchacho inteligente y rápidamente se da cuenta de que su única forma de aprobar era hacer trampa. El día de la prueba, Tito se sentó en el asiento que estaba entre Hansel y Elena para fijarse, con la esperanza de que, uniendo las preguntas respondidas por cada uno, se pudiera formar un examen correcto. 6 | 7 | El examen tiene $n$ preguntas, ordenadas en la hoja. Elena y Hansel pueden no ser capaces de responder cada uno el examen entero, pero todas las preguntas que responden están correctas. Se conoce cuáles preguntas respondió cada uno y se reciben como dos listas ordenadas de enteros entre $1$ y $n$. Tito tiene $p$ oportunidades para mirar hacia la izquierda (hoja de Hansel) o hacia la derecha (hoja de Elena) y su agilidad mental le alcanza para ver las respuestas de $k$ preguntas consecutivas (en cualquier posición) cada vez que echa una mirada a un examen. 8 | 9 | Ayude a Tito a saber la cantidad máxima de preguntas que puede responder con su (tramposa) estrategia. 10 | 11 | ### Statement 12 | 13 | Dado que hay $n$ preguntas y la persona puede mirar a lo sumo $p$ veces, con cada vistazo cubriendo a lo máximo $k$ preguntas consecutivas en la hoja de respuestas de uno de los dos genios, donde cada genio puede o no tener la respuesta correcta para ciertas preguntas: 14 | 15 | Determina el número máximo de preguntas que la persona puede responder correctamente al copiar estratégicamente de las hojas de respuestas de los genios sin ser atrapada por el supervisor. 16 | 17 | ### Solution 18 | 19 | Primero, observa que nunca es subóptimo mirar tantas preguntas consecutivas como sea posible. Es decir, simplemente mira $k$ preguntas consecutivas cada vez que decidas echar un vistazo, a menos que exceda el límite (pregunta $n$). 20 | 21 | Sea $dp[i][j][a][b]$ el número de preguntas que puedes contestar correctamente al considerar las preguntas de $1$ a $i$, echando exactamente $j$ vistazos, con $a$ y $b$ siendo el número de preguntas restantes que pueden ser observadas como un beneficio de los vistazos previos. Como se mencionó antes, es óptimo mirar tantas preguntas consecutivas como sea posible, por lo que cuando decidimos mirar, compartimos este beneficio (de mirar) con las siguientes preguntas también, y se almacenan en $a$ y $b$, que indican cuántas de las próximas preguntas consecutivas se pueden mirar sin gastar un vistazo adicional. La respuesta se puede calcular en $O(npk^2)$. (Puedes ver en el código cómo.) 22 | 23 | Sin embargo, $npk^2$ puede ser hasta $(1000) * (1000) * (50) * (50)  =  2,500,000,000$, por lo que la solución no cabrá en el límite de tiempo de $2$ segundos. 24 | 25 | Esto se puede mejorar. Observa que si $p > 2 * \lceil n / k \rceil$, puedes mirar todas las preguntas en las hojas de respuestas de ambos genios, por lo que la respuesta se puede encontrar en $O(n)$ (o simplemente puedes fijar $p$ en $2 * \lceil n / k \rceil$ y ejecutar la programación dinámica). Al eliminar este caso, el tiempo de ejecución para la programación dinámica se convertirá en $O(npk^2) = O(n(n / k)k^2) = O(n^2k)$. Esto, efectivamente, se ajustará en el tiempo, ya que $n^2k$ es solo $(1000) * (1000) * (50)  =  50,000,000$. 26 | 27 | El problema con el límite de memoria podría persistir, por lo que necesitarás optimizar el uso de la memoria. Por ejemplo, dado que solo necesitas $dp[i - 1][..][..][..]$ y $dp[i][..][..][..]$ al calcular $dp[i][..][..][..]$, podrías recordar solo las dos últimas filas. El uso de memoria será mucho menor. El uso del tipo de dato corto (`short`) en lugar de `int` también podría ayudar. 28 | 29 | COMPLEJIDAD TEMPORAL: 30 | $O(npk^2) = O(n(n / k)k^2) = O(n^2k)$ 31 | -------------------------------------------------------------------------------- /Proyectos/old/2024/first-ex-statements/DP-clasificar-suspensos.md: -------------------------------------------------------------------------------- 1 | # DP 2 | 3 | ## Tramposo 4 | 5 | Leandro es profesor de programación. En sus ratos libres, le gusta divertirse con las estadísticas de sus pobres estudiantes reprobados. Los estudiantes están separados en $n$ grupos. Casualmente, este año, todos los estudiantes reprobaron alguno de los dos exámenes finales: $P$ (POO) y $R$ (Recursividad). 6 | 7 | Esta tarde, Leandro decide entretenerse separando a los estudiantes suspensos en conjuntos de tamaño $k$ que cumplan lo siguiente: En un mismo conjunto, todos los estudiantes son del mismo grupo $i$ ($1 \leq i \leq n$) o suspendieron por el mismo examen $P$ o $R$. 8 | 9 | Conociendo el grupo y la prueba suspendida de cada estudiante, y el tamaño de los conjuntos, ayude a Leandro a saber cuántos conjuntos de estudiantes suspensos puede formar. 10 | 11 | ### Statement 12 | 13 | Dado que hay $n$ arbustos, cada uno con $a_i$ bayas rojas y $b_i$ bayas azules, y cada canasta puede contener $k$ bayas, pero cada canasta solo puede contener bayas del mismo arbusto o bayas del mismo color (rojo o azul): 14 | 15 | Determina el número máximo de canastas que se puede llenar completamente. 16 | 17 | ### Solution 18 | 19 | Solución 1: 20 | 21 | No existe una solución ávida obvia, por lo que intentaremos la programación dinámica. Sea $dp[i][j]$ un arreglo booleano que indica si podemos tener $j$ bayas rojas extra después de considerar los primeros $i$ arbustos. Una baya es extra si no se coloca en una canasta llena (de cualquier tipo). Ten en cuenta que si sabemos que hay $j$ bayas rojas extra, también podemos calcular fácilmente cuántas bayas azules extra hay. Nota que podemos elegir nunca tener más de $k-1$ bayas rojas extra, porque de lo contrario podemos llenar alguna cantidad de canastas con ellas. 22 | 23 | Para la transición del arbusto $i-1$ al arbusto $i$, recorremos todos los posibles valores $l$ desde $0$ hasta $\min(k-1, a_i)$ y verificamos si podemos dejar $l$ bayas rojas extra del arbusto actual $i$. Para algunos $i$ y $j$, podemos dejar $l$ bayas rojas extra y poner las bayas rojas restantes en canastas, posiblemente con bayas azules del mismo arbusto si $(a_i - l) \mod k + b_i \geq k$. El razonamiento para esto es el siguiente: 24 | 25 | En primer lugar, estamos dejando $l$ bayas rojas (o al menos intentándolo). Mostramos que de este arbusto, habrá como máximo una canasta que contenga tanto bayas rojas como azules (todas de este arbusto). Para colocar las bayas rojas restantes en canastas llenas, cuantas más bayas azules tengamos, mejor. Es óptimo colocar las bayas rojas restantes $a_i - l$ en sus propias canastas separadas antes de fusionarlas con las bayas azules (de esta manera se requieren menos bayas azules para satisfacer la condición). Luego, si $(a_i - l) \mod k + b_i$ es al menos $k$, podemos llenar alguna canasta con las bayas rojas restantes y posiblemente algunas bayas azules. Recuerda que no nos importa cuántas bayas azules extra dejamos porque eso está determinado de manera única por la cantidad de bayas rojas extra. 26 | 27 | También observa que siempre podemos dejar $a_i \mod k$ bayas rojas extra. 28 | 29 | Denota el número total de bayas como $t$. La respuesta será el máximo sobre todos los $(t-j)/k$ tales que $dp[n][j]$ es verdadero, $0 \leq j \leq k-1$. 30 | 31 | Solución 2: 32 | 33 | Usamos programación dinámica. Sea $dp[i][j]$ verdadero si, después de considerar los primeros $i$ arbustos, $j$ es el número de bayas rojas en canastas heterogéneas módulo $k$. Las canastas heterogéneas contienen bayas del mismo arbusto, y las canastas homogéneas contienen bayas del mismo tipo. 34 | 35 | Supongamos que conocemos el número de bayas rojas en canastas heterogéneas módulo $k$. Esto determina el número de bayas azules en canastas heterogéneas módulo $k$. Dado que el número de bayas rojas en canastas homogéneas es un múltiplo de $k$, también determina el número de bayas rojas que no están en ninguna canasta (podemos asumir de manera segura que es menos de $k$, ya que de lo contrario podemos formar otra canasta). De manera similar, podemos determinar el número de bayas azules que no están en ninguna canasta, y así deducir el número de canastas. 36 | 37 | Para calcular los posibles números de bayas rojas en canastas heterogéneas módulo $k$, basta con observar cada arbusto por separado y determinar los posibles números de bayas rojas módulo $k$ en canastas heterogéneas para ese arbusto. Si hay más de una canasta heterogénea para un arbusto, podemos reorganizar las bayas para dejar como máximo una heterogénea. Ahora tenemos dos casos. Si no hay canastas heterogéneas, el número de bayas rojas en esas canastas es obviamente cero. Si hay una canasta heterogénea, sea $x$ el número de bayas rojas en ella y $k-x$ el número de bayas azules en ella. Claramente, $0 \leq x \leq a_i$ y $0 \leq k - x \leq b_i$. Reorganizando, obtenemos $\max(0, k - b_i) \leq x \leq \min(a_i, k)$. Estos corresponden a las transiciones para nuestra programación dinámica. 38 | 39 | COMPLEJIDAD TEMPORAL: 40 | $O(nk^2)$ 41 | -------------------------------------------------------------------------------- /Proyectos/old/2024/first-ex-statements/Greedy-Distancias-de-arboles.md: -------------------------------------------------------------------------------- 1 | # Greedy 2 | 3 | ## Distancia de Árboles 4 | 5 | Un árbol se define como un grafo conectado y no dirigido con $n$ vértices y $n - 1$ aristas. La distancia entre dos vértices en un árbol es igual al número de aristas en el camino simple único entre ellos. 6 | 7 | Te dan dos enteros $x$ y $y$. Construye un árbol con las siguientes propiedades: 8 | 9 | - El número de pares de vértices con una distancia par entre ellos es igual a $x$. 10 | - El número de pares de vértices con una distancia impar entre ellos es igual a $y$. 11 | 12 | Por un par de vértices, nos referimos a un par ordenado de dos vértices (posiblemente, el mismo o diferente). 13 | 14 | ### Statement 15 | 16 | Te dan dos enteros $x$ y $y$. Tu tarea es construir un árbol con las siguientes propiedades: 17 | 18 | - El número de pares de vértices con una distancia par entre ellos es igual a $x$. 19 | - El número de pares de vértices con una distancia impar entre ellos es igual a $y$. 20 | 21 | Por un par de vértices, nos referimos a un par ordenado de dos (posiblemente, el mismo o diferente) vértices. 22 | 23 | ### Solution 24 | 25 | La primera observación básica que podemos hacer es que la suma de $x$ y $y$ debe ser un cuadrado perfecto. 26 | 27 | ¿Por qué? 28 | Dado que cada vértice forma un par con cada otro vértice de un árbol, incluido él mismo, para cualquier árbol de $N$ vértices, el número total de pares ordenados de vértices será $N^2$. 29 | 30 | Como la suma de $x$ y $y$ representa el número total de pares ordenados de vértices, esto debe ser un cuadrado perfecto. Por lo tanto, $x + y$ debe ser un cuadrado perfecto. 31 | 32 | Ahora, debemos encontrar si es posible tener un árbol que tenga $x$ pares de vértices con una distancia par entre ellos y $y$ pares de vértices con una distancia impar entre ellos. 33 | 34 | Está bastante claro que cualquier vértice del árbol puede estar en un nivel par o en un nivel impar. La raíz del árbol está en el nivel par ($0$ - indexado de manera base $0$). Veamos cuántos pares de vértices tienen una distancia impar entre ellos. 35 | 36 | Teorema: 37 | Cualquier par de vértices $(x, y)$ tiene una distancia impar entre ellos si los vértices $x$ y $y$ provienen de niveles de paridad opuesta. 38 | 39 | Prueba 40 | Supongamos que el vértice $x$ está en un nivel par y el vértice $y$ en un nivel impar. La distancia entre dos nodos se puede obtener en términos del menor ancestro común (lca). A continuación se muestra la fórmula para la misma: 41 | 42 | $$ 43 | dis(x, y) = dis(root, x) + dis(root, y) - 2 \times dis(root, lca) 44 | $$ 45 | 46 | Dado que $x$ está en un nivel par, $dis(root, x)$ es par, mientras que $y$ está en un nivel impar, por lo que $dis(root, y)$ es impar. Por lo tanto, podemos ver que: 47 | 48 | $$ 49 | dis(x, y) = Par + Impar - Par 50 | $$ 51 | 52 | Esto significa que si los vértices están en niveles de paridad opuesta, la distancia entre ellos es impar. 53 | 54 | Cálculo de los pares de vértices con una distancia impar 55 | Para las distancias impares, cada vértice en un nivel impar formará un par con cada vértice en un nivel par, y viceversa. 56 | 57 | Supongamos que $[e_1, e_2, e_3, \dots, e_i]$ son los vértices en niveles pares, y $[o_1, o_2, o_3, \dots, o_j]$ son los vértices en niveles impares. Ahora, para cada vértice en un nivel par, formará un par con cada vértice en un nivel impar, y viceversa. Por lo tanto: 58 | 59 | $$ 60 | Odd \ pairs' = (e_1 \times o_1 + e_1 \times o_2 + \dots + e_1 \times o_j + \dots + e_i \times o_1 + \dots + e_i \times o_j) 61 | $$ 62 | 63 | $$ 64 | Odd \ pairs' = (e_1 + e_2 + e_3 + \dots + e_i) \times (o_1 + o_2 + o_3 + \dots + o_j) 65 | $$ 66 | 67 | $$ 68 | Odd \ pairs' = E \times O 69 | $$ 70 | 71 | Donde $E$ y $O$ representan el número de nodos en niveles pares e impares, respectivamente. 72 | 73 | Dado que estamos considerando pares ordenados, el número de estos pares se duplicará. Si $(x, y)$ es un par con una distancia impar entre ellos, entonces $(y, x)$ también tendrá una distancia impar. Por lo tanto: 74 | 75 | $$ 76 | Odd \ pairs = 2 \times E \times O 77 | $$ 78 | 79 | Esto significa que solo nos importa el número de vértices en niveles pares e impares. La raíz es el único nodo en el nivel $0$, y si queremos más nodos en un nivel par, debe existir al menos un vértice en un nivel impar. Ahora podemos verificar todas las posibilidades y encontrar si existe una disposición de vértices que satisfaga $x$ y $y$ según el problema. Si es así, podemos construir y mostrar el árbol. 80 | 81 | COMPLEJIDAD TEMPORAL: 82 | $O(\sqrt{X + Y})$ 83 | -------------------------------------------------------------------------------- /Proyectos/old/2024/first-ex-statements/Greedy-Sufijo-balanceado.md: -------------------------------------------------------------------------------- 1 | # Greedy 2 | 3 | ## Sufijo Balanceado 4 | 5 | Te dan una cadena $S$ de longitud $N$ y un número entero $K$. 6 | 7 | Sea $C$ el conjunto de todos los caracteres en $S$. La cadena $S$ se llama buena si, para cada sufijo de $S$: 8 | 9 | La diferencia entre las frecuencias de cualquier par de caracteres en $C$ no excede $K$. 10 | En particular, si el conjunto $C$ tiene un solo elemento, la cadena $S$ es buena. 11 | 12 | Encuentra si existe una reordenación de $S$ que sea buena. 13 | Si existen múltiples reordenaciones de este tipo, imprime la reordenación lexicográficamente más pequeña. 14 | Si no existe tal reordenación, imprime $-1$ en su lugar. 15 | 16 | Nota que un sufijo de una cadena se obtiene eliminando algunos (posiblemente cero) caracteres desde el principio de la cadena. Por ejemplo, los sufijos de $S = abca$ son $\\{a, ca, bca, abca\\}$. 17 | 18 | ### Statement 19 | 20 | Una cadena $S$ se llama buena si, para cada sufijo $T$ de $S$ y los caracteres $c_1, c_2$ que ocurren en $S$, las frecuencias de $c_1$ en $T$ y $c_2$ en $T$ difieren en como máximo $K$. 21 | 22 | Dada $S$, encuentra su reordenación buena lexicográficamente más pequeña. 23 | 24 | ### Solution 25 | 26 | Primero, averigüemos cuándo exactamente una cadena $S$ tiene una reordenación buena. 27 | Llamaremos a un sufijo que satisfaga la condición dada, balanceado. 28 | 29 | Sea $c_1$ y $c_2$ algunos dos caracteres que ocurren en $S$, y sean $f_{c_1}$ y $f_{c_2}$ sus respectivas frecuencias. 30 | Si $S$ va a ser buena, claramente debe cumplirse $\lvert f_{c_1} - f_{c_2} \rvert \leq K$; de lo contrario, la cadena en sí no está balanceada, sin importar cómo la reorganicemos. 31 | 32 | De hecho, esta condición también es suficiente para que $S$ tenga una reordenación buena, es decir, $\lvert f_{c_1} - f_{c_2} \rvert \leq K$ para cada par de caracteres $c_1, c_2$ en $S$. 33 | 34 | Prueba 35 | Podemos construir una reordenación buena de manera codiciosa. 36 | 37 | Supongamos que tenemos $N$ caracteres, de modo que $\lvert f_{c_1} - f_{c_2} \rvert \leq K$ para cada par de ellos. 38 | Construya una cadena de la siguiente manera: 39 | 40 | Sea $c$ un carácter con la frecuencia máxima. Coloca una ocurrencia de $c$, y disminuye $f_c$ en $1$. 41 | Es fácil ver que esto preserva la condición $\lvert f_{c_1} - f_{c_2} \rvert \leq K$, y así podemos colocar todos los $N$ caracteres. 42 | Además, la cadena que construimos es buena, ya que en cada paso el sufijo que creamos está balanceado. 43 | 44 | Observe que, en lugar de verificar cada diferencia, es suficiente verificar si la diferencia máxima satisface la condición. 45 | Es decir, una cadena tiene una reordenación buena si y solo si la diferencia entre los caracteres de frecuencia máxima y mínima es $\leq K$. 46 | 47 | Ahora que sabemos cómo verificar si $S$ tiene una reordenación buena, necesitamos averiguar cómo construir la reordenación lexicográficamente más pequeña. 48 | Construir objetos lexicográficamente más pequeños generalmente implica hacerlo de manera codiciosa, y esta tarea no es diferente. 49 | 50 | Para cada $i$ de $1$ a $N$, intentemos colocar los caracteres `'a', 'b', 'c', \dots, 'z'` en orden. Tan pronto como se pueda colocar uno de ellos, hazlo y pasa al siguiente índice. 51 | Para verificar si colocar un cierto caracter es posible, necesitamos verificar si el sufijo de la cadena comenzando desde $i+1$ tiene una reordenación buena o no. 52 | 53 | Sin embargo, tenemos una condición bastante simple para esto: la diferencia entre las frecuencias máximas y mínimas de los caracteres restantes debe ser $\leq K$. 54 | Sabemos qué caracteres hemos colocado hasta ahora, por lo que también conocemos las frecuencias de los caracteres restantes. 55 | Entonces, podemos verificar esta condición en $O(\Sigma)$ simplemente calculando directamente la frecuencia máxima y mínima, donde $\Sigma$ es el tamaño del alfabeto (aquí, $\Sigma = 26$). 56 | 57 | Para cada posición, probamos (como máximo) $26$ posibilidades, y procesamos cada una en $O(26)$. 58 | Por lo tanto, nuestra solución se ejecuta en $O(26^2 \cdot N)$, lo cual es lo suficientemente rápido. 59 | Es posible pero innecesario hacerlo correr en $O(26 \cdot N)$ con algunas optimizaciones menores. 60 | 61 | COMPLEJIDAD TEMPORAL 62 | $O(26 \cdot N)$ 63 | -------------------------------------------------------------------------------- /Proyectos/old/2024/first-ex-statements/Greedy-Videojuego.md: -------------------------------------------------------------------------------- 1 | # Greedy 2 | 3 | ## Videojuego 4 | 5 | Estás creando un nivel para un videojuego. El nivel consiste en $n$ habitaciones dispuestas en un círculo. Las habitaciones están numeradas del $1$ al $n$. Cada habitación contiene exactamente una salida: completar la $j$-ésima habitación te permite pasar a la $(j+1)$-ésima habitación (y completar la $n$-ésima habitación te permite pasar a la $1$-era habitación). 6 | 7 | Se te da la descripción del multiconjunto de $n$ cofres: el $i$-ésimo cofre tiene un valor de tesoro $c_i$. 8 | 9 | Cada cofre puede ser de uno de dos tipos: 10 | 11 | - cofre normal — cuando un jugador entra en una habitación con este cofre, recoge el tesoro y procede a la siguiente habitación; 12 | - cofre trampa — cuando un jugador entra en una habitación con este cofre, el cofre se lo come vivo, y él pierde. 13 | 14 | El jugador comienza en una habitación aleatoria, con cada habitación teniendo la misma probabilidad de ser elegida. Las ganancias del jugador son iguales al valor total de los tesoros que haya recogido antes de perder. 15 | 16 | Se te permite elegir el orden en que los cofres se colocan en las habitaciones. Para cada $k$ de $1$ a $n$, coloca los cofres en las habitaciones de tal manera que: 17 | 18 | - cada habitación contenga exactamente un cofre; 19 | - exactamente $k$ cofres sean trampas; 20 | - el valor esperado de las ganancias del jugador sea el mínimo posible. 21 | 22 | Ten en cuenta que para cada $k$ la colocación se elige de manera independiente. 23 | 24 | Se puede ver que está en la forma de $\frac{P}{Q}$ donde $P$ y $Q$ son enteros no negativos y $Q≠0$. 25 | 26 | ### Solution 27 | 28 | Al principio, digamos que el valor esperado es igual al promedio de las ganancias totales en todas las posiciones y es igual a la suma de las ganancias en todas las posiciones dividida por $n$. Entonces podemos pasar a minimizar la suma. 29 | 30 | Aprendamos cómo resolver la tarea para un $k$ fijo. Fijemos algún arreglo y rotamos las habitaciones de manera que la última habitación contenga un cofre trampa. Así que ahora tienes $cnt_1$ cofres normales, luego un único cofre trampa, $cnt_2$ cofres normales, un único cofre trampa, ..., $cnt_k$ cofres normales, un único cofre trampa. Todos los $cnt_i \geq 0$ y $\sum_{i=1}^{k} cnt_i = n - k$. 31 | 32 | Observa algunos de estos intervalos de longitud $cnt_i$. El último cofre en el intervalo se toma de $cnt_i$ posiciones iniciales, el penúltimo se toma $cnt_i - 1$ veces, y así sucesivamente. 33 | 34 | Ahora vamos a encontrar la mejor forma de elegir los $cnt_i$. Fija algunos valores de $cnt_i$. Observa el más pequeño de estos valores y el más grande de ellos. Sean los valores $x$ y $y$. Si difieren en al menos 2 ($x \leq y - 2$), entonces el resultado más pequeño siempre se puede lograr moviendo un cofre normal del más grande al más pequeño. (esto lleva demostración). 35 | 36 | Ahora ya tenemos todos los $cnt_i$ establecidos. Lo único que queda es asignar los cofres de manera óptima. Escribe la unión de todas las secuencias de coeficientes de todos los intervalos $\bigcup_{i=1}^{n-k} [1,\dots,cnt_i - 1, cnt_i]$ y ordénalas en orden no decreciente. Es fácil demostrar que los cofres deben ordenarse en orden no creciente (es algo bastante clásico, puedes intentar demostrarlo mostrando que cualquier otro arreglo puede mejorarse fácilmente una vez más). 37 | 38 | Eso nos permite escribir una solución en $O(n^2)$. Ordena todos los cofres al principio, luego para algún $k$, multiplica el valor del $i$-ésimo cofre por $\left\lfloor \frac{i}{k} \right\rfloor$ y suma los resultados. 39 | 40 | Finalmente, aceleremos esto con sumas prefixadas. Observa que los primeros $k$ valores se multiplican por $0$, los segundos $k$ valores por $1$ y así sucesivamente. Si $n$ no es divisible por $k$, entonces el último bloque simplemente tiene una longitud menor que $k$. Por lo tanto, podemos calcular la respuesta para algún $k$ en $O(nk)$. Y eso es igual a $O\left(\sum_{k=1}^{n} nk\right) = O(n \log n)$. 41 | 42 | COMPLEJIDAD TEMPORAL: 43 | $O(n \log n)$. 44 | -------------------------------------------------------------------------------- /Proyectos/old/2024/second-ex-statements/Flow-Corrupción.md: -------------------------------------------------------------------------------- 1 | # Grafos 2 | 3 | ## Corrupción 4 | 5 | Han pasado 20 años desde que Lázaro se graduó de Ciencias de la Computación 6 | (haciendo una muy buena tesis) y las vueltas de la vida lo llevaron a convertirse 7 | en el presidente del Partido Comunista de Cuba. Una de sus muchas responsabilidades 8 | consiste en visitar zonas remotas. En esta ocasión debe visitar una 9 | ciudad campestre de Pinar del Río. 10 | 11 | También han pasado 20 años desde que Marié consiguió su título en MATCOM. 12 | Tras años de viaje por las grandes metrópolis del mundo, en algún punto 13 | decidió que prefería vivir una vida tranquila, aislada de la urbanización, en una 14 | tranquila ciudad de Pinar del Río. Las vueltas de la vida quisieron que precisamente 15 | Marié fuera la única universitaria habitando la ciudad que Lázaro se 16 | dispone a visitar. 17 | 18 | Los habitantes de la zona entraron en pánico ante la visita de una figura tan 19 | importante y decidieron reparar las calles de la ciudad por las que transitaría 20 | Lázaro. El problema está en que nadie sabía qué ruta tomaría el presidente y 21 | decidieron pedirle ayuda a Marié. 22 | 23 | La ciudad tiene $n$ puntos importantes, unidos entre sí por calles cuyos 24 | tamaños se conoce. Se sabe que Lázaro comenzará en alguno de esos puntos 25 | ($s$) y terminará el viaje en otro ($t$). Los ciudadanos quieren saber, para 26 | cada par $s$, $t$, cuántas calles participan en algún camino de distancia mínima 27 | entre $s$ y $t$. 28 | 29 | ### Statement 30 | 31 | Se tiene un grafo simple (es decir, un grafo sin lazos ni múltiples aristas) que consta de $n$ vértices y $m$ aristas. 32 | 33 | El peso del $i$-ésimo vértice es $a_i$. 34 | 35 | El peso de la $i$-ésima arista es $w_i$. 36 | 37 | Un subgrafo de un grafo es un conjunto de vértices del grafo y un conjunto de aristas del grafo. El conjunto de aristas debe cumplir la condición de que ambos extremos de cada arista del conjunto deben pertenecer al conjunto de vértices elegido. 38 | 39 | El peso de un subgrafo es la suma de los pesos de sus aristas, menos la suma de los pesos de sus vértices. Necesitas encontrar el peso máximo de un subgrafo del grafo dado. El grafo dado no contiene lazos ni múltiples aristas. 40 | 41 | ### Solution 42 | 43 | Este problema se puede reducir a uno de los problemas de flujo más conocidos: "Proyectos e Instrumentos". En este problema, tenemos un conjunto de proyectos que podemos realizar, cada uno con su costo, y un conjunto de instrumentos (cada uno también con un costo). Cada proyecto depende de algunos instrumentos, y cada instrumento se puede usar un número ilimitado de veces. Debemos elegir un subconjunto de proyectos y un subconjunto de instrumentos de manera que, si se elige un proyecto, también se eligen todos los instrumentos de los que depende dicho proyecto, y debemos maximizar la diferencia entre la suma de los costos de los proyectos elegidos y la suma de los costos de los instrumentos elegidos. 44 | 45 | El problema sobre proyectos e instrumentos se puede resolver con la siguiente red de flujo: 46 | 47 | - Para cada proyecto, se crea un vértice y se agrega una arista dirigida desde la fuente a este vértice con capacidad igual al costo de este proyecto. 48 | - Para cada instrumento, se crea un vértice y se agrega una arista dirigida desde este vértice al sumidero con capacidad igual al costo de este instrumento. 49 | - Para cada proyecto, se crean aristas con capacidad infinita desde el vértice que denota este proyecto a todos los vértices que representan los instrumentos requeridos para este proyecto. 50 | 51 | Analicemos un corte $(S, T)$ entre la fuente y el sumidero en este grafo, y construyamos una solución basada en este corte de la siguiente manera: si un vértice de proyecto pertenece a $S$, entonces tomamos este proyecto; si un vértice de instrumento pertenece a $S$, entonces tomamos este instrumento; todos los demás proyectos e instrumentos se descartan. Si una arista entre algún proyecto y algún instrumento es cortada, entonces significa que la respuesta es incorrecta (intentamos tomar un proyecto que requiere algún instrumento que no tomamos), y el valor del corte es infinito. De lo contrario, el valor del corte es igual al costo total de los instrumentos tomados y los proyectos descartados, y necesitamos minimizarlo. Por lo tanto, el corte mínimo en esta red denota la mejor respuesta. 52 | 53 | Reducir el problema dado a este problema es sencillo: las aristas del grafo dado son "proyectos", y los vértices del grafo dado son "instrumentos". 54 | 55 | En cuanto a la implementación, cualquier algoritmo de flujo que utilice escalado de capacidad debería ser suficiente. 56 | 57 | COMPLEJIDAD TEMPORAL: 58 | $O(n^2m)$ 59 | -------------------------------------------------------------------------------- /Proyectos/old/2024/second-ex-statements/Flow-El-Triangulo.md: -------------------------------------------------------------------------------- 1 | # Grafos 2 | 3 | ## El triángulo 4 | 5 | Javier estaba un día practicando con su instrumento favorito: El triángulo. El 6 | triángulo es un instrumento musical tan espectacular que sus notas se escriben 7 | como números enteros. Este día Javier se propuso componer una canción de 8 | una forma bastante peculiar. Tomó $n$ enteros (notas) aleatorios y los escribió 9 | en una lista $a$. Una melodía válida es una subsecuencia de $a$ en la que todos sus 10 | números adyacentes cumplen que: 11 | 12 | - Se diferencian en $1$. 13 | - Son congruentes módulo $7$. 14 | 15 | La canción de Javier debe contener exactamente $4$ melodías que cumplan con 16 | lo anterior y además no se intercepten entre sí. Ayude a Javier encontrando una 17 | canción que maximice las notas usadas. 18 | 19 | ### Statement 20 | 21 | Dado un conjunto de $n$ elementos, se deben tomar cuatro subsecuencias no vacías y no intersectantes de manera que la suma de sus longitudes sea máxima. 22 | 23 | Una subsecuencia es una secuencia que se puede derivar de otra eliminando algunos elementos sin cambiar el orden de los elementos restantes. 24 | 25 | Una subsecuencia es válida cuando cada dos elementos adyacentes o bien difieren en 1, o son congruentes módulo 7. 26 | 27 | Debes escribir un programa que calcule la suma máxima de longitudes de dichas cuatro subsecuencias no vacías y no intersectantes que cumplan con las condiciones dadas. 28 | 29 | ### Solution 30 | 31 | Construyamos un grafo dirigido donde los vértices representan elementos y una arista dirigida va del vértice $i$ al vértice $j$ si y solo si $i < j$ y $a_i$ y $a_j$ pueden ser consecutivos en una secuencia válida. Ahora debemos encontrar cuatro caminos más largos y disjuntos en este grafo. 32 | 33 | Este problema se puede resolver utilizando algoritmos de flujo de costo mínimo $k$. Construimos una red donde cada vértice del grafo se divide en dos (denotemos los vértices que obtenemos al dividir un vértice $i$ como $v_{i,1}$ y $v_{i,2}$). Luego, cada arista dirigida se transforma en una arista dirigida desde el vértice $v_{i,2}$ hasta el vértice $v_{j,1}$ en la red, la capacidad de esta arista es 1 y el costo es 0. También añadimos aristas dirigidas desde la fuente a cada vértice $v_{i,1}$ y desde cada vértice $v_{i,2}$ al sumidero (tienen las mismas características: capacidad es 1, costo es 0). Para cada $i$, añadimos una arista dirigida entre $v_{i,1}$ y $v_{i,2}$; estas aristas representan el uso de un elemento en una secuencia, por lo que sus capacidades también son igual a 1, y sus costos son $-1$. La respuesta al problema es igual al valor absoluto del costo mínimo de un flujo de 4 en esta red. 34 | 35 | El problema es que la red es realmente grande. Por lo tanto, debemos usar algún algoritmo avanzado de costo mínimo. 36 | 37 | La solución modelo usa el algoritmo de Dijkstra con potenciales de Johnson para encontrar caminos aumentantes de costo mínimo. Asignamos un número $p(v)$ a cada vértice $v$ de la red (estos números se llaman potenciales). Luego modificamos los costos de las aristas: si alguna arista tenía costo $c_{i,j}$, ahora su costo es $c'_{i,j} = c_{i,j} + p(i) - p(j)$. Es fácil demostrar que si algún camino entre los vértices $v$ y $u$ era el más corto sin modificar los costos con potenciales, entonces después de modificarlos seguirá siendo el más corto. Entonces, en lugar de buscar un camino aumentante en la red original, podemos buscarlo en una red con aristas modificadas. ¿Por qué? Porque siempre es posible establecer todos los potenciales de manera que todos los costos de las aristas sean no negativos (y podremos usar Dijkstra para encontrar el camino más corto de la fuente al sumidero). 38 | 39 | Antes de buscar el primer camino aumentante, calculamos los potenciales recursivamente: $p(source) = 0$, $p(v) = \min{p(u) + c_{u,v}}$ (verificamos todos los $u$ tales que hay una arista en la red). La red es acíclica antes de empujar el flujo, por lo que siempre hay una manera de calcular estos potenciales con programación dinámica. Luego, cada vez que queremos encontrar un camino aumentante, ejecutamos el algoritmo de Dijkstra en la red modificada, empujamos flujo a través del camino que encontramos y modificamos los potenciales: el nuevo potencial de cada vértice $v$ se convierte en $p'(v) = p(v) + d(v)$, donde $d(v)$ es la distancia entre la fuente y el vértice $v$ en la red modificada (y encontramos esta distancia con Dijkstra). Cuando hemos encontrado cuatro caminos aumentantes, hemos terminado y es hora de evaluar el costo del flujo. 40 | -------------------------------------------------------------------------------- /Proyectos/old/2024/second-ex-statements/Flow-El-viaje.md: -------------------------------------------------------------------------------- 1 | # Grafos 2 | 3 | ## El Viaje 4 | 5 | Kenny y Jesús quieren hacer un viaje por carretera de La Habana a Guantánamo. 6 | **Objetivo**: Fiesta. 7 | **Obstáculo**: Precio de la gasolina. Incluyendo el punto de salida (La Habana) y de destino (Guantánamo), hay un total de $n$ puntos a los que es posible visitar, unidos por $m$ carreteras cuyos costos de gasolina se conocen. 8 | Los compañeros comienzan entonces a planificar su viaje. 9 | 10 | Luego de pensar por unas horas, Kenny va entusiasmado hacia Jesús y le entrega una hoja. En esta hoja se encontraban $q$ tuplas de la forma $(u, v, l)$ y le explica que a partir de ahora considerarían como útiles sólo a los caminos entre los puntos $u$ y $v$ cuyo costo de gasolina fuera menor o igual a $l$, para $u$, $v$, $l$ de alguna de las $q$ tuplas. 11 | 12 | Jesús lo miró por un momento y le dijo: *Gracias*. La verdad esta información no era del todo útil para su viaje. Pero para no desperdiciar las horas de trabajo de Kenny, se dispuso a buscar lo que definió como carreteras útiles. Una carretera útil es aquella que pertenece a algún camino útil. 13 | Ayude a Kenny y Jesús encontrando el número total de carreteras útiles. 14 | 15 | PD: Cuando le contaron del plan a Sheyla, esta se preguntó extrañada por qué Kenny y Jesús 16 | no habían simplemente buscado el camino de costo mínimo entre La Habana y Guantánamo. 17 | Hay que estudiar más discreta. 18 | 19 | ### Statement 20 | 21 | Se te da un grafo no dirigido y ponderado con $n$ vértices, junto con $q$ tríos $(u, v, l)$, donde en cada trío $u$ y $v$ son vértices y $l$ es un entero positivo. Una arista $e$ se llama útil si existe al menos un trío $(u, v, l)$ y un camino (no necesariamente simple) con las siguientes propiedades: 22 | 23 | - $u$ y $v$ son los extremos de este camino, 24 | - $e$ es una de las aristas de este camino, 25 | - La suma de los pesos de todas las aristas en este camino no excede $l$. 26 | 27 | Imprime el número de aristas útiles en este grafo. 28 | 29 | ### Solution 30 | 31 | Encuentra todas las distancias entre los vértices usando el algoritmo de Floyd con complejidad $O(n^3)$. Considera todos los tríos con un punto final fijo, digamos $v$. Vamos a encontrar todas las aristas útiles correspondientes a dichos tríos. 32 | 33 | Una arista $(a, b, w)$ es útil si existe un trío $(v, u_i, l_i)$ tal que: 34 | 35 | $$ \text{dist}(v, a) + w + \text{dist}(b, u_i) \leq l_i \quad \text{equivalente a} \quad -l_i + \text{dist}(u_i, b) \leq -w - \text{dist}(v, a). $$ 36 | 37 | Observa que el lado derecho de la desigualdad depende solo del vértice fijo $v$ y de la propia arista, por lo que vamos a minimizar el lado izquierdo sobre todos los posibles tríos. Esto se puede hacer usando el algoritmo de Dijkstra en $O(n^2)$ si inicializamos la distancia a todos los $u_i$ con $-l_i$. 38 | 39 | Una vez que hemos realizado esto para todos los vértices $v$, solo queda verificar para cada arista si ha sido marcada como útil para algún vértice $v$. 40 | -------------------------------------------------------------------------------- /Proyectos/old/2024/second-ex-statements/Flow-Grid.md: -------------------------------------------------------------------------------- 1 | # Grafos 2 | 3 | ## Grid 4 | 5 | Un día iba David por su facultad cuando ve un cuadrado formado por $n \times n$ 6 | cuadraditos de color blanco. A su lado, un mensaje ponía lo siguiente: "Las 7 | siguientes tuplas de la forma $(x_1, y_1, x_2, y_2)$ son coordenadas para pintar de 8 | negro algunos rectángulos. (coordenadas de la esquina inferior derecha y superior 9 | izquierda)" Luego se veían $k$ tuplas de cuatro enteros. Finalmente decía: 10 | "Luego de tener el cuadrado coloreado de negro en las secciones pertinentes, su 11 | tarea es invertir el cuadrado a su estado original. En una operación puede seleccionar 12 | un rectángulo y pintar todas sus casillas de blanco. El costo de pintar 13 | de blanco un rectángulo de $h \times w$ es el mínimo entre $h$ y $w$. Encuentre el costo 14 | mínimo para pintar de blanco todo el cuadrado." 15 | 16 | En unos 10 minutos David fue capaz de resolver el problema. Desgraciadamente 17 | esto no es una película y el problema de David no era un problema 18 | del milenio que lo volviera millonario. Pero, ¿sería usted capaz de resolverlo 19 | también? 20 | 21 | ### Statement 22 | 23 | Se tiene una cuadrícula cuadrada de tamaño $n \times n$. Algunas celdas están coloreadas de negro, mientras que las demás están coloreadas de blanco. En una operación, puedes seleccionar un rectángulo y colorear todas sus celdas de blanco. El costo para colorear un rectángulo de tamaño $h \times w$ es $min(h, w)$. Debes hacer que todas las celdas sean blancas con el costo total mínimo. 24 | 25 | ### Solution 26 | 27 | Si utilizamos un rectángulo $[x1; x2) \times [y1; y2)$ con $x2 - x1 \leq y2 - y1$, podemos cambiarlo a $[x1; x2) \times [0, n)$ sin cambiar el costo. Además, podemos elegir $w$ rectángulos de ancho 1 en lugar de un rectángulo de ancho $w$, lo que tampoco cambiará el costo. 28 | 29 | Por lo tanto, debemos elegir el número mínimo de columnas y filas de manera que todas las celdas negras estén cubiertas por al menos una columna o fila seleccionada. Si construimos un grafo bipartito, donde la parte izquierda representa las columnas y la parte derecha las filas, y hay una arista si la celda en la intersección de una fila y una columna está coloreada de negro, entonces la respuesta es el tamaño mínimo de la cobertura de vértices en este grafo. El tamaño mínimo de la cobertura de vértices es igual al tamaño de un emparejamiento máximo, que se puede encontrar utilizando flujo de red. Solo resta notar que podemos comprimir vértices idénticos, y tendremos $O(m)$ vértices en ambas partes. 30 | 31 | COMPLEJIDAD TEMPORAL: 32 | Con el algoritmo de Dinic, la complejidad es $O(m^4)$. 33 | -------------------------------------------------------------------------------- /Proyectos/old/2024/second-ex-statements/Graph-Creditos.md: -------------------------------------------------------------------------------- 1 | # Grafos 2 | 3 | ## Créditos 4 | 5 | El colegio de Francisco comienza la próxima semana. Hay $S$ asignaturas en total, y necesita elegir $K$ de ellas para asistir cada día, para cumplir con el número requerido de créditos para pasar el semestre. Hay $N+1$ edificios. Su hostal está en el edificio número $0$. La asignatura $i$ se enseña en el edificio $A_i$. Después de cada asignatura, hay un descanso durante el cual regresa a su hostal. Hay $M$ caminos bidireccionales de longitud $1$ que conectan el edificio $u$ con el edificio $v$. Encuentra la distancia total mínima posible que Francisco necesita recorrer cada día si elige sus asignaturas sabiamente. 6 | 7 | ### Statement 8 | 9 | El colegio de Francisco comienza la próxima semana. Hay $S$ asignaturas en total representadas mediante un arreglo $A$, y necesita elegir $K$ de ellas para asistir cada día, para cumplir con el número requerido de créditos para pasar el semestre. Hay $N+1$ edificios. Su hostal está en el edificio número $0$. La asignatura $i$ se enseña en el edificio $S[i]$. Después de cada asignatura, hay un descanso durante el cual regresa a su hostal. Hay $M$ caminos bidireccionales de tamaño $1$ que conectan el edificio $u$ con el edificio $v$. Encuentra la distancia total mínima posible que Francisco necesita recorrer cada día si elige sus asignaturas sabiamente. 10 | 11 | ### Solution 12 | 13 | El término nivel de un nodo $x$ con respecto a un nodo fijo en un grafo se utiliza para describir el número de aristas en el camino más corto desde el nodo fijo hasta el nodo $x$. 14 | 15 | Se ha dado que el colegio tiene un edificio de hostal y $N$ edificios restantes donde se imparten las asignaturas. También se da información sobre qué edificios están conectados por caminos de longitud $1$. Estos datos se pueden representar como un grafo con edificios como nodos y caminos como aristas. Dado que todos los caminos tienen una longitud de una unidad, el peso de cada arista se asignará como $1$. Una implicación de los caminos de una unidad de longitud es que la distancia recorrida desde el hostal hasta el edificio $B$ será igual al nivel de $B$ con respecto al hostal en el grafo. 16 | 17 | Demostración 18 | 19 | Consideremos que el hostal (nodo $0$) está en el nivel $0$. Todos los nodos que se pueden alcanzar desde el nodo $0$ mediante una sola arista están en el nivel 1 con respecto al nodo $0$. De manera similar, cualquier edificio alcanzable desde el hostal mediante $x$ caminos bidireccionales, cada uno conectando un par único de edificios, estará en el nivel $x$ con respecto al hostal. 20 | 21 | Establecemos la relación entre el número de aristas $e$ (necesarias para cruzar desde el hostal hasta alcanzar cualquier otro edificio) y el nivel $L$ (de un edificio con respecto al hostal): 22 | 23 | $$ 24 | e = L 25 | $$ 26 | 27 | Si necesitamos viajar desde $0$ hasta $x$ en este grafo y $e$ número de aristas $E_1$ a $E_e$ constituyen el camino desde $0$ hasta $x$, entonces la distancia total $D$ de nuestro camino estará dada por: 28 | 29 | $$ 30 | D = \sum_{i=1}^{e} d(E_i) 31 | $$ 32 | 33 | donde $d(E_i)$ representa la longitud de la arista $E_i$. En este caso, las longitudes de los caminos individuales son $1$ cada uno, por lo que obtenemos: 34 | 35 | $$ 36 | D = \sum_{i=1}^{e} 1 37 | $$ 38 | 39 | $$ 40 | D = e 41 | $$ 42 | 43 | lo cual, según la relación establecida anteriormente, se puede escribir como: 44 | 45 | $$ 46 | D = L 47 | $$ 48 | 49 | Donde $L$ es el nivel del nodo $x$ con respecto al nodo $0$. 50 | 51 | Dado que el grafo no es acíclico, un solo nodo $x$ puede tener múltiples formas de llegar desde $0$ a través de diferentes conjuntos de aristas. Puede parecer que pertenece a diferentes niveles debido a esto; en este caso, consideraremos que pertenece al menor de estos niveles (el más cercano al nivel $0$), porque necesitamos encontrar la distancia mínima recorrida por Chef, lo que implica que si existe más de un camino hacia un nodo desde $0$, seguiremos el de menor peso. 52 | 53 | Ejemplo 54 | 55 | Si existen $2$ caminos desde el nodo $0$ hasta $x$ que consisten en $e$ y $f$ aristas respectivamente ($e < f$). Supongamos que los caminos están constituidos por las aristas $E_1$ a $E_e$ y $F_1$ a $F_f$ respectivamente. En tal caso, nuestro nivel $L$ del nodo $x$ con respecto al nodo $0$ será $e$, permitiéndonos recorrer un camino más corto desde el hostal hasta el edificio $x$ por parte de Chef. 56 | 57 | En caso de que $e = f$, ambos caminos darán como resultado el mismo nivel de $x$, por lo que no se generará ningún conflicto. 58 | 59 | Para implementar esta asignación de niveles a los nodos, podemos utilizar un recorrido en anchura (recorrido en orden de niveles) del grafo al que hemos convertido los datos de entrada. Más sobre este algoritmo se puede encontrar aquí y aquí. 60 | 61 | Comenzando el recorrido en orden de niveles desde el nodo $0$ y el nivel $0$, a medida que observamos que un nivel completo ha sido eliminado de la cola y sus hijos (el siguiente nivel) han sido empujados a ella, incrementamos el nivel y continuamos el recorrido. 62 | 63 | Una vez que todos los edificios en los que se enseñan las asignaturas de $1$ a $S$ han recibido un nivel con respecto al hostal, necesitamos seleccionar $K$ de entre estos que tengan los niveles mínimos. Los edificios pueden aparecer más de una vez, es decir, pueden existir casos en los que más de una asignatura se esté impartiendo en un solo edificio, por lo tanto, al seleccionar los $K$ edificios con niveles mínimos, necesitamos asegurarnos de que el mismo edificio pueda ser seleccionado tantas veces como asignaturas diferentes se estén impartiendo en él. 64 | 65 | Para establecer esto, utilizamos un multiconjunto. Recorremos todos los edificios en los que se están impartiendo las asignaturas de $1$ a $S$ e insertamos sus niveles correspondientes en un multiconjunto. La suma de los primeros $K$ elementos de este multiconjunto nos dará la distancia recorrida por Chef desde el hostal hasta esos edificios en los que se están impartiendo las asignaturas que eligió, por lo tanto, multiplicamos esto por $2$ para obtener la respuesta final (ya que vuelve a su hostal después de cada asignatura, necesitando recorrer la misma distancia que tuvo al ir del hostal al edificio). 66 | 67 | $O(\max(N, \log(S) \times S))$ es la complejidad temporal. 68 | 69 | Esto se debe a que el recorrido en orden de niveles toma $O(N)$ de tiempo y la construcción del multiconjunto toma $O(\log(S) \times S)$, es decir, $S$ operaciones de inserción de $O(s_i)$ cada una, para todos los $s_i$ desde $0$ hasta $S-1$. 70 | 71 | COMPLEJIDAD TEMPORAL: 72 | $O(\max(N, \log(S) \times S))$ 73 | -------------------------------------------------------------------------------- /Proyectos/old/2024/second-ex-statements/Graph-Dos-permutaciones.md: -------------------------------------------------------------------------------- 1 | # Grafos 2 | 3 | ## Dos permutaciones 4 | 5 | Rodrigo es el maestro de una academia de magia y debe organizar y clasificar sus ingredientes mágicos. Son tan mágicos que, consumidos de la forma adecuada, te permiten ver criaturas fantásticas y luces de colores, dejando poca resaca (Rodrigo no los consume pues es un maestro sano). Tiene dos estantes mágicos, uno llamado "a" y otro llamado "b", ambos con $n$ frascos de pociones, cada uno etiquetado con un número del 1 al $n$. Cada frasco está en un lugar aleatorio en los estantes, pero el número en cada frasco es único en cada estante. 6 | 7 | Tu tarea es ayudar a Rodrigo a organizar ambos estantes en el orden correcto, de modo que los números en los frascos estén en orden ascendente de izquierda a derecha en ambos estantes. Sin embargo, estos estantes mágicos sólo se pueden mover siguiendo unas reglas: 8 | 9 | 1. Puedes elegir cualquier número $i$ entre 1 y $n$; 10 | 2. Encuentra el frasco en el estante "a" que tiene el número $i$ y cambia su posición con el frasco en la posición $i$; 11 | 3. Luego, encuentra el frasco en el estante "b" que tiene el número $i$ y cambia su posición con el frasco en la posición $i$. 12 | 13 | Tu objetivo es organizar ambos estantes con el menor número de movimientos posible, asegurándote de que todos los frascos en ambos estantes estén en el orden correcto al finalizar la tarea. 14 | 15 | ### Statement 16 | 17 | Se te dan dos permutaciones $a$ y $b$, ambas de tamaño $n$. Una permutación de tamaño $n$ es un arreglo de $n$ elementos, donde cada entero de $1$ a $n$ aparece exactamente una vez. Los elementos en cada permutación están indexados de $1$ a $n$. 18 | 19 | Puedes realizar la siguiente operación cualquier número de veces: 20 | 21 | 1. Elige un entero $i$ de $1$ a $n$; 22 | 2. Sea $x$ el entero tal que $a_x = i$. Intercambia $a_i$ con $a_x$; 23 | 3. Sea $y$ el entero tal que $b_y = i$. Intercambia $b_i$ con $b_y$. 24 | 25 | Tu objetivo es ordenar ambas permutaciones en orden ascendente (es decir, que se cumplan las condiciones $a_1 < a_2 < \cdots < a_n$ y $b_1 < b_2 < \cdots < b_n$) utilizando el número mínimo de operaciones. Ten en cuenta que ambas permutaciones deben estar ordenadas después de realizar la secuencia de operaciones que hayas elegido. 26 | 27 | ### Solution 28 | 29 | La solución a este problema utiliza la descomposición cíclica de permutaciones. Una descomposición cíclica de una permutación se formula de la siguiente manera: tratas una permutación como un grafo dirigido sobre $n$ vértices, donde cada vértice $i$ tiene un arco saliente $i \rightarrow p_i$. Este grafo consta de varios ciclos, y las propiedades de este grafo pueden ser útiles al resolver problemas basados en permutaciones. 30 | 31 | Primero, ¿cómo se ve la descomposición cíclica de una permutación ordenada? Cada vértice pertenece a su propio ciclo formado por un bucle que va desde ese vértice hacia sí mismo. Intentaremos llevar las descomposiciones cíclicas de las permutaciones dadas a esta forma. 32 | 33 | ¿Qué hace una operación con el entero $i$ en la descomposición cíclica de la permutación? Si $i$ está en su propio ciclo separado, la operación no hace nada ($p_i = i$, por lo que intercambiamos un elemento consigo mismo). 34 | 35 | De lo contrario, supongamos que $x$ es el elemento antes de $i$ en el mismo ciclo ($p_x = i$), y $y$ es el elemento después de $i$ en el mismo ciclo ($p_i = y$). Nota que este puede ser el mismo elemento. Cuando aplicamos una operación sobre $i$, intercambiamos $p_x$ con $p_i$, por lo que después de la operación, $p_i = i$, y $p_x = y$. Así que, $i$ sale del ciclo y forma su propio ciclo separado, y $y$ se convierte en el siguiente vértice en el ciclo después de $x$. Por lo tanto, al usar la operación, excluimos el vértice $i$ del ciclo. 36 | 37 | Supongamos que queremos ordenar una permutación. Entonces, cada ciclo de longitud $\geq 2$ debe ser descompuesto: para un ciclo de longitud $c$, necesitamos excluir $c-1$ vértices de él para descomponerlo. El vértice que no tocamos puede ser cualquier vértice del ciclo, y todos los demás vértices del ciclo serán extraídos usando una operación dirigida a ellos. Es fácil ver ahora que si queremos ordenar una permutación, no necesitamos aplicar la misma operación dos veces, y el orden de las operaciones no importa. 38 | 39 | Entonces, ¿qué pasa con ordenar dos permutaciones en paralelo? Cambiemos un poco el problema: en lugar de calcular el número mínimo de operaciones, intentaremos maximizar el número de enteros $i$ que no tocamos con las operaciones. Entonces, un entero $i$ puede quedar intacto si es el único vértice intacto en sus ciclos en ambas permutaciones... ¿Ves a dónde va esto? 40 | 41 | Supongamos que queremos dejar el vértice $i$ intacto. Esto significa que en sus ciclos en ambas permutaciones, todos los demás vértices deben ser extraídos con una operación. Entonces, si dos ciclos de diferentes permutaciones tienen un vértice en común, podemos dejar este vértice intacto, siempre y cuando no haya otros vértices intactos en ambos ciclos. Construyamos un grafo bipartito, donde cada vértice en la parte izquierda representa un ciclo en la primera permutación, y cada vértice en la parte derecha representa un ciclo en la segunda permutación. Trataremos cada entero $i$ como una arista entre dos vértices respectivos en el grafo bipartito. Si la arista correspondiente a $i$ es "usada" ($i$ se deja intacto), no podemos "usar" ninguna arista incidente al mismo vértice en la parte izquierda o derecha. Entonces, maximizar el número de números intactos es en realidad lo mismo que encontrar el emparejamiento máximo en este grafo bipartito. 42 | 43 | Después de encontrar el emparejamiento máximo, restaurar la respuesta real es fácil. Recuerda que las aristas saturadas por el emparejamiento corresponden a los enteros que no tocamos con nuestras operaciones, el orden de las operaciones no importa, y cada entero debe ser utilizado en una operación solo una vez. Por lo tanto, la respuesta real es el conjunto de todos los enteros sin aquellos que corresponden a las aristas del emparejamiento. 44 | 45 | Esta solución se ejecuta en $O(n^2)$ incluso con una implementación directa del emparejamiento bipartito, ya que el grafo bipartito tiene como máximo $O(n)$ vértices y $O(n)$ aristas. 46 | 47 | COMPLEJIDAD TEMPORAL: 48 | $O(n^2)$ 49 | -------------------------------------------------------------------------------- /Proyectos/old/2024/second-ex-statements/Graph-Greedy-Distancia-de-árboles.md: -------------------------------------------------------------------------------- 1 | # Grafos 2 | 3 | ## Distancia de árboles 4 | 5 | Un árbol se define como un grafo no dirigido y conectado con $n$ vértices y $n-1$ aristas. La distancia entre dos vértices en un árbol es igual al número de aristas en el camino simple único entre ellos. 6 | 7 | Se te dan dos enteros $x$ y $y$. Construye un árbol con las siguientes propiedades: 8 | 9 | - El número de pares de vértices con una distancia par entre ellos es igual a $x$. 10 | - El número de pares de vértices con una distancia impar entre ellos es igual a $y$. 11 | 12 | Por par de vértices, nos referimos a un par ordenado de dos vértices (posiblemente, el mismo o diferente). 13 | 14 | ### Statement 15 | 16 | Se te dan dos enteros $x$ y $y$. Tu tarea es construir un árbol con las siguientes propiedades: 17 | 18 | - El número de pares de vértices con una distancia par entre ellos es igual a $x$. 19 | - El número de pares de vértices con una distancia impar entre ellos es igual a $y$. 20 | 21 | Por par de vértices, nos referimos a un par ordenado de dos vértices (posiblemente, el mismo o diferente). 22 | 23 | ### Solution 24 | 25 | La primera observación básica que podemos hacer es que la suma de $x$ y $y$ debe ser un cuadrado perfecto. 26 | 27 | ### ¿Por qué? 28 | 29 | Dado que cada vértice forma un par con todos los demás vértices de un árbol, incluido él mismo, para cualquier árbol de $N$ vértices, el número total de pares ordenados de vértices será $N^2$. 30 | 31 | Como la suma de $x$ y $y$ representa el número total de pares ordenados de vértices, que es un cuadrado perfecto, entonces $x + y$ debe ser un cuadrado perfecto. 32 | 33 | Ahora, queda por determinar si es posible tener un árbol que tenga $x$ pares de vértices con una distancia par entre ellos y $y$ pares de vértices con una distancia impar entre ellos. 34 | 35 | Está claro que cualquier vértice del árbol puede estar en un nivel par o en un nivel impar. La raíz del árbol está en el nivel par ($0$-basado en la indexación). Averigüemos cuántos pares de vértices tienen una distancia impar entre ellos. 36 | 37 | Teorema: 38 | 39 | Cualquier par de vértices $(x, y)$ tiene una distancia impar entre ellos si los vértices $x$ y $y$ están en niveles de paridad opuesta. 40 | 41 | Demostración: 42 | 43 | Supongamos que el vértice $x$ está en un nivel par y el vértice $y$ en un nivel impar. La distancia entre dos nodos se puede obtener en términos del ancestro común más bajo (LCA). A continuación se muestra la fórmula para calcularlo: 44 | 45 | $$ 46 | dis(x, y) = dis(root, x) + dis(root, y) - 2 \times dis(root, lca) 47 | $$ 48 | 49 | Dado que $x$ está en un nivel par, $dis(root, x)$ es par, mientras que $y$ está en un nivel impar, por lo que $dis(root, y)$ es impar. Por lo tanto, podemos ver: 50 | 51 | $$ 52 | dis(x, y) = \text{Par} + \text{Impar} - \text{Par} 53 | $$ 54 | 55 | Eso significa que si los vértices están en niveles de paridad opuesta, entonces la distancia entre ellos es impar. 56 | 57 | Ahora calculemos cuántos pares de vértices tienen una distancia impar entre ellos. Para distancias impares, cada vértice que está en un nivel impar formará un par con cada vértice que esté en un nivel par y viceversa. 58 | 59 | Supongamos que $[e_1, e_2, e_3, \dots, e_i]$ y $[o_1, o_2, o_3, \dots, o_j]$ son los vértices que están en niveles pares e impares, respectivamente. Ahora, para cada vértice que está en un nivel par, formará un par con cada vértice que está en un nivel impar y viceversa. Por lo tanto: 60 | 61 | $$ 62 | \text{Pares impares} = (e_1 \times o_1 + e_1 \times o_2 + \dots + e_1 \times o_j + \dots + e_i \times o_1 + \dots + e_i \times o_j) 63 | $$ 64 | 65 | $$ 66 | \text{Pares impares} = (e_1 + e_2 + e_3 + \dots + e_i) \times (o_1 + o_2 + o_3 + \dots + o_j) 67 | $$ 68 | 69 | $$ 70 | \text{Pares impares} = E \times O 71 | $$ 72 | 73 | donde $E$ y $O$ representan el número de nodos que están en niveles pares e impares, respectivamente. 74 | 75 | Dado que estamos buscando los pares ordenados de dos, el número de pares anteriores se duplicará. Es decir, si $(x, y)$ es un par que tiene una distancia impar entre ellos, entonces $(y, x)$ también tendrá una distancia impar entre ellos. Por lo tanto: 76 | 77 | $$ 78 | \text{Pares impares} = 2 \times E \times O 79 | $$ 80 | 81 | Eso significa que solo nos importa el número de vértices que están en niveles pares e impares. La raíz es el único nodo que está en el nivel $0$, y si queremos más nodos en un nivel par, debe existir al menos un vértice en un nivel impar. Ahora podemos verificar cada posibilidad y encontrar si existe tal disposición de vértices que satisfaga $x$ y $y$ del problema. Si es así, podemos construir el árbol. 82 | 83 | COMPLEJIDAD TEMPORAL: 84 | $O(\sqrt{X+Y})$ 85 | -------------------------------------------------------------------------------- /Proyectos/old/2024/second-ex-statements/Graph-Pcc.md: -------------------------------------------------------------------------------- 1 | # Grafos 2 | 3 | ## PCC 4 | 5 | Han pasado 20 años desde que Lázaro se graduó de Ciencias de la Computación 6 | (haciendo una muy buena tesis) y las vueltas de la vida lo llevaron a convertirse 7 | en el presidente del Partido Comunista de Cuba. Una de sus muchas responsabilidades 8 | consiste en visitar zonas remotas. En esta ocasión debe visitar una 9 | ciudad campestre de Pinar del Río. 10 | 11 | También han pasado 20 años desde que Marié consiguió su título en MATCOM. 12 | Tras años de viaje por las grandes metrópolis del mundo, en algún punto 13 | decidió que prefería vivir una vida tranquila, aislada de la urbanización, en una 14 | tranquila ciudad de Pinar del Río. Las vueltas de la vida quisieron que precisamente 15 | Marié fuera la única universitaria habitando la ciudad que Lázaro se 16 | dispone a visitar. 17 | 18 | Los habitantes de la zona entraron en pánico ante la visita de una figura tan 19 | importante y decidieron reparar las calles de la ciudad por las que transitaría 20 | Lázaro. El problema está en que nadie sabía qué ruta tomaría el presidente y 21 | decidieron pedirle ayuda a Marié. 22 | 23 | La ciudad tiene $n$ puntos importantes, unidos entre sí por calles cuyos 24 | tamaños se conoce. Se sabe que Lázaro comenzará en alguno de esos puntos 25 | ($s$) y terminará el viaje en otro ($t$). Los ciudadanos quieren saber, para 26 | cada par $s$, $t$, cuántas calles participan en algún camino de distancia mínima 27 | entre $s$ y $t$. 28 | 29 | ### Statement 30 | 31 | Dado un país con n ciudades y m caminos. Cada camino conecta un par de ciudades distintas y es bidireccional. Entre cualquier par de ciudades, como máximo hay un camino. Para cada camino, se conoce su longitud. 32 | 33 | Sabemos que el Presidente pronto viajará desde la ciudad s hasta la ciudad t y elegirá uno de los caminos más cortos de s a t, pero no se sabe cuál camino escogerá. 34 | 35 | se desea reparar los caminos en las posibles rutas del Presidente. 36 | 37 | Para todos los pares distintos s, t (s < t), encuentra el número de caminos que están en al menos un camino más corto entre s y t. 38 | 39 | ### Solution 40 | 41 | Necesitamos contar la cantidad de aristas en todos los caminos más cortos entre cada par de vértices. Hagamos algo más sencillo primero: en lugar de contar todas las aristas, contaremos solo aquellas que tienen el vértice de destino en su lado. Por ejemplo, estas son las aristas que pertenecen a los caminos más cortos desde 4 a 2 que están conectadas al vértice 2: 42 | 43 | Denotemos este número de la siguiente manera: inEdgessource, v — número de aristas que llegan al vértice v en algún camino más corto desde el vértice fuente al vértice v. En el ejemplo dado, inEdges4, 2 = 3. También denotemos el conjunto Ssource, dest — es el conjunto de los vértices que pertenecen a al menos un camino más corto desde source a dest. Por ejemplo, S4, 2 = {1, 2, 3, 4}. Con estas dos variables se puede ver que la respuesta para los vértices source y dest será: 44 | 45 | $Edges(s,d) = \sum_{v \in S_{s,d}} InEdges(s,v)$ 46 | 47 | En otras palabras, la respuesta para los vértices s y d será igual a la suma de inEdgess, v para todos los vértices v que pertenecen a algún camino más corto de s a d. Entonces, lo único que queda es calcular estos S y inEdges. Ambos se pueden calcular fácilmente si se tienen las distancias mínimas entre todos los pares de vértices. Y estas distancias se pueden calcular utilizando el algoritmo de Floyd-Warshall. Por lo tanto, la solución completa es: 48 | 49 | 1. Calcular las distancias mínimas entre todos los pares de vértices utilizando el algoritmo de Floyd-Warshall. 50 | 51 | 2. Contar inEdges. Simplemente itera sobre todos los vértices fuente y todas las aristas. Para cada arista, verifica si alguno de sus extremos pertenece a algún camino más corto desde la fuente. 52 | 53 | 3. Calcular la respuesta. Utiliza tres ciclos para iterar sobre los vértices: fuente, destino y mid. Los primeros dos vértices son aquellos para los cuales estamos calculando la respuesta. El tercer vértice es el vértice que debería pertenecer a algún camino más corto (básicamente estamos verificando si v pertenece a Ssource, dest). Si mid pertenece a algún camino más corto de source a dest, entonces sumamos inEdgessource, mid a la respuesta. 54 | 55 | Cada paso tiene una complejidad de O(n^3). 56 | 57 | COMPLEJIDAD TEMPORAL: 58 | O(n^3) 59 | -------------------------------------------------------------------------------- /Proyectos/old/2024/second-ex-statements/Graph-Spaning-trees.md: -------------------------------------------------------------------------------- 1 | # Grafos 2 | 3 | ## Ciudades 4 | 5 | El país de Berland tiene inicialmente $N$ ciudades aisladas, donde la $i$-ésima ciudad tiene una significancia de $A_i$. El Presidente de Berland quiere conectar todas las ciudades. Él puede construir una carretera bidireccional de longitud $L$ $(L > 0)$ desde la ciudad $X$ a la ciudad $Y$ si $(A_X \& A_Y \& L) = L$, donde $ \& $ representa el operador AND bit a bit. 6 | 7 | ¿Cuál es la longitud total mínima de las carreteras que tiene que construir para conectar todas las ciudades en Berland? Imprime $-1$ si es imposible. 8 | 9 | Nota: 10 | 11 | Se dice que la ciudad $X$ y la ciudad $Y$ están conectadas si existe una secuencia de ciudades $C_1, C_2, \dots, C_K$ $(K \geq 1)$ tal que $C_1 = X$, $C_K = Y$, y existe una carretera desde $C_i$ a $C_{i+1}$ $(1 \leq i < K)$. Todas las ciudades en Berland se dicen conectadas cuando cada par de ciudades en Berland está conectado. 12 | 13 | ### Statement 14 | 15 | Dado $N$ vértices donde el $i$-ésimo tiene un valor $A_i$, puedes dibujar una arista entre $u$ y $v$ de longitud $L$ si $L$ es una submáscara tanto de $A_u$ como de $A_v$. 16 | 17 | Encuentra el costo mínimo para conectar todas las ciudades, o indica si es imposible hacerlo. 18 | 19 | ### Solution 20 | 21 | Por el momento, supongamos que podemos conectar todos los $N$ vértices. Hagamos un par de observaciones: 22 | 23 | 1. El grafo final va a ser un árbol. 24 | 2. Cualquier arista $L$ en el grafo final tendrá una longitud que es una potencia de $2$, es decir, $L = 2^k$ para algún $k \geq 0$. 25 | 26 | Demostración: 27 | 28 | El primer punto debería ser obvio: si tenemos un ciclo, podemos eliminar alguna arista de él para obtener un costo estrictamente menor mientras preservamos la conectividad. 29 | 30 | El segundo punto tampoco es difícil de ver: si una longitud contiene más de un bit activado, eliminar cualquier bit activado en ella aún la mantendrá como una arista válida, pero reducirá el costo. 31 | 32 | Esto nos da inmediatamente una solución, aunque lenta: 33 | Considera el (multi)grafo $G$ en $N$ vértices, donde para cada $(u, v, k)$ hay una arista entre $u$ y $v$ de longitud $2^k$ si $u$ y $v$ tienen ambos el $k$-ésimo bit activado. 34 | Nuestra respuesta no es más que el peso del árbol de expansión mínima (MST) de este grafo. 35 | 36 | Sin embargo, este grafo puede tener hasta $30 \cdot N^2$ aristas, y calcularlas todas es obviamente imposible, por lo que necesitamos hacerlo mejor. 37 | 38 | Para optimizar esto, veamos cómo funcionaría el algoritmo de Kruskal para el MST en este grafo: 39 | 40 | - Primero, considerará todas las aristas con peso $2^0$. 41 | - Luego, considerará todas las aristas con peso $2^1$. 42 | - Luego, considerará todas las aristas con peso $2^2$. 43 | - Y así sucesivamente... 44 | 45 | ¿Qué tiene de especial esto? 46 | 47 | Sea $x_1 < x_2 < \dots < x_m$ todos los vértices con el $k$-ésimo bit activado. Entonces, las aristas con peso $2^k$ son exactamente todos los pares de estos $m$ vértices. 48 | 49 | Ahora, supongamos que encontramos $x_1, \dots, x_m$ para un $k$ fijo. 50 | No necesitamos considerar todos los pares de estos $m$ vértices: simplemente necesitamos mantener suficientes aristas para conectarlos todos. La forma más sencilla de hacer esto es considerar solo las aristas $(x_1, x_2), (x_2, x_3), \dots, (x_{m-1}, x_m)$. 51 | 52 | Observa que hacer esto reduce inmediatamente el número de aristas a $< N$ por bit, para un total de $< 30 \cdot N$ aristas en total. Esto es lo suficientemente pequeño como para que podamos ejecutar un algoritmo de MST en estas aristas directamente y obtener la respuesta. 53 | 54 | Nota: 55 | Si el grafo final que obtenemos no está conectado, la respuesta es $-1$, ya que no hay forma de conectarlo. 56 | 57 | COMPLEJIDAD TEMPORAL: 58 | O(n^3) 59 | -------------------------------------------------------------------------------- /Proyectos/old/2024/third-ex-statements/npc-Cubic subgraph.md: -------------------------------------------------------------------------------- 1 | # DP 2 | 3 | ## Transformación de Redes de Esqueletos 4 | 5 | Por algún motivo, a Claudia no le gustaba la paz y le irritaba que sus compañeros de aula se llevaran tan bien. Ella quería ver 6 | el mundo arder. Un día un demonio se le acercó y le propuso un trato: "A cambio de un cachito de tu alma, te voy a dar el poder para 7 | romper relaciones de amistad de tus compañeros, con la única condición de que no puedes romperlas todas". Sin pensarlo mucho (Qué más 8 | da un pequeño trocito de alma), Claudia aceptó y se puso a trabajar. Ella conocía, dados sus k compañeros de aula, quiénes eran mutuamente 9 | amigos. 10 | 11 | Como no podía eliminar todas las relaciones de amistad, pensó en qué era lo siguiente que podía hacer más daño. Si una persona quedaba con 12 | uno o dos amigos, podría hacer proyectos en parejas o tríos (casi todos los de la carrera son así), pero si tenía exactamente tres amigos, 13 | cuando llegara un proyecto de tres personas, uno de sus amigos debería quedar afuera y se formaría el caos. 14 | 15 | Ayude a Claudia a saber si puede sembrar la discordia en su aula eliminando relaciones de amistad entre sus compañeros de forma que todos queden, o bien sin amigos, o con exactamente tres amigos. 16 | 17 | ### Statement 18 | 19 | Dado $G=(V,E)$, encontrar si existe un subconjunto de aristas $E'$, tal que en $G'=(V,E') todos los vértices tengan grado 0 o 3$. 20 | 21 | ### Solution 22 | -------------------------------------------------------------------------------- /Proyectos/old/2024/third-ex-statements/npc-Dominating Set.md: -------------------------------------------------------------------------------- 1 | # DP 2 | 3 | ## El secreto de la Isla 4 | 5 | En el corazón del vasto océano azul, existe una isla tropical conocida como La Isla de Coba, un lugar de exuberante vegetación y antigua sabiduría. La tribu que habita en esta isla ha vivido en armonía con la naturaleza durante siglos, guiados por un consejo de ancianos que custodian el equilibrio entre los habitantes de la isla y sus recursos. 6 | 7 | Sin embargo, una nueva generación de líderes debe ser elegida, y para ello, los ancianos han planteado un desafío ancestral. Los aspirantes al consejo deben descubrir un grupo selecto de **guardianes**, quienes, colocados en puntos estratégicos de la isla, podrían vigilar a todos los aldeanos sin dejar a ninguno sin supervisión directa o indirecta. 8 | 9 | La isla tiene una serie de aldeas unidas entre ellas por caminos. El reto es encontrar un grupo de guardianes tan pequeño como sea posible, de modo que cada aldea esté bajo la protección directa de un guardián, o al menos, esté conectada a una aldea donde se haya asignado un guardián. 10 | 11 | Los jóvenes líderes deben resolver este desafío para mostrar su valía. Con cada nueva selección de guardianes, la estabilidad de la isla se estremece. El futuro de La Isla de Coba depende de que uno de los jóvenes (como tú) encuentre esta distribución óptima de guardianes y se convierta en el próximo jefe absoluto. 12 | 13 | ### Statement 14 | 15 | Given a graph $$ G $$ and an integer $$ k $$, does there exist a subset of vertices of size at most $$ k $$ such that every vertex in the graph is either in the subset or adjacent to a vertex in the subset? 16 | 17 | ### Solution 18 | 19 | Reduces from: Vertex Cover 20 | Reduction Idea: The vertex cover can be transformed into a dominating set by including vertices that cover all edges, ensuring that every vertex is either included or adjacent to a covered vertex. 21 | -------------------------------------------------------------------------------- /Proyectos/old/2024/third-ex-statements/npc-Exact Cover.md: -------------------------------------------------------------------------------- 1 | # DP 2 | 3 | ## La misión intergaláctica: El enigma de los subuniversos 4 | 5 | En un rincón distante del universo conocido, la nave **Exploradora 7** se dirigía hacia una nebulosa olvidada, una región misteriosa que contenía fragmentos de realidades paralelas. El capitán **Zarath** y su equipo de científicos estaban encargados de resolver un antiguo enigma interdimensional dejado por una civilización extinta: la **Pregunta de los Subuniversos**. 6 | 7 | En este sector del cosmos, se decía que existía un conjunto de **subuniversos**, cada uno representado por una dimensión alternativa al **Universo Primario** con algunas leyes físicas derivadas de este. Todas las leyes de cualquiera de los **subuniversos** estaban en el primario, pero no necesariamente los **subuniversos** tenían todas las leyes del **Universo primario**. 8 | 9 | El objetivo de la misión era descubrir si era posible utilizar un subconjunto específico de estas dimensiones para reconstruir el **Universo Primario**, de forma que cada aspecto esencial de la realidad solo fuera influido por una dimensión alternativa única. 10 | 11 | El ingeniero jefe **Kala**, mirando la pantalla de datos cuánticos (para que suenen más interesantes), exclamó: "¡El enigma está claro! Nos han dado un **conjunto maestro** de leyes, al que llamaremos $$ U $$ (**Universo Primario**), y una colección de dimensiones alternativas, a la que llamaremos $$ S $$. Ahora, la verdadera cuestión es: ¿podemos encontrar una subcolección de estas dimensiones, que cubra cada ley del **Universo Primario** exactamente una vez?" 12 | 13 | El equipo de la **Exploradora 7** sabía que el destino de la misión, y quizás del propio universo, dependía de la respuesta correcta. 14 | 15 | ### Statement 16 | 17 | Given a set $$ U $$ and a collection of subsets $$ S $$, is there a subcollection of $$ S $$ that covers every element of $$ U $$ exactly once? 18 | 19 | ### Solution 20 | 21 | Reduces from: 3-SAT 22 | Reduction Idea: Construct subsets corresponding to the literals in the clauses of a 3-SAT instance. Each subset contains elements representing the literals, ensuring that a satisfying assignment corresponds to an exact cover. 23 | -------------------------------------------------------------------------------- /Proyectos/old/2024/third-ex-statements/npc-Feedback Arc Set.md: -------------------------------------------------------------------------------- 1 | # DP 2 | 3 | ## El Laberinto 4 | 5 | En tiempos antiguos, esos cuando los edificios se derrumbaban por mal tiempo y la conexión mágica era muy lenta, los héroes del reino se aventuraban en el legendario laberinto, un intrincado entramado de pasillos, cada uno custodiado por una bestia mágica. Los pasillos sólo podían caminarse en un sentido pues un viento muy fuerte no te dejaba regresar. Se decía que las criaturas del laberinto, uniendo sus fuerzas mágicas (garras y eso), habían creado ciclos dentro de este, atrapando a cualquiera que entrara a ellos en una especie de montaña rusa sin final en la que un monstruo se reía de ti cada vez que le pasabas por al lado, una locura. 6 | 7 | El joven héroe Orion, se enfrentaba a una prueba única: desmantelar los ciclos eternos y liberar los pasillos del laberinto para que su gente pudiera cruzarlo sin caer en los bucles infinitos de burla y depravación. 8 | 9 | Cada vez que el héroe asesinaba cruelmente (no importa porque somos los buenos) a la criatura que cuidaba una un camino, este se rompía y desaparecía. Orión era fuerte, pero no tanto, debía optimizar bien a cuántos monstruos enfrentarse. Ayude al héroe encontrando la mínima cantidad de monstruos que debe matar para eliminar todas las montañas rusas de burla y depravación. 10 | 11 | ### Statement 12 | 13 | Given a directed graph, what is the smallest set of edges that can be removed to make the graph acyclic? 14 | 15 | ### Solution 16 | 17 | Reduces from: Hamiltonian Cycle 18 | Reduction Idea: Convert a Hamiltonian cycle instance into a directed graph where the edges of the cycle must remain, and the task is to find the minimum set of edges to remove to break all cycles. 19 | -------------------------------------------------------------------------------- /Proyectos/old/2024/third-ex-statements/npc-Graph Isomorphism.md: -------------------------------------------------------------------------------- 1 | # DP 2 | 3 | ## Transformación de Redes de Esqueletos 4 | 5 | Alex el nigromante se dedicaba a unir huesos de criaturas muertas para armar esqueletos bizarros. Cada hueso se une a al menos otro por conexiones mágicas y está nombrado con un número entero. 6 | 7 | De pronto, moviendo huesos por aquí y por allá, creó una criatura tan horrorosa que parecía salida de la mismísima Australia, pero muerta. Alex sintió amor a primera vista, completa fascinación. 8 | 9 | Con una criatura tan horrenda, el resto de sus creaciones palidecían en comparación, pero desmantelarlas representaba un desperdicio de componentes mágicos. De pronto se le ocurrió una idea. Quizás podía convertir alguna de sus otras criaturas en una copia (o al menos algo medio parecido) de esta bizarra genialidad sólo renombrando los huesos que las conformaban. Para él, una criatura es parecida a otra cuando todos sus huesos dos a dos están conectados a exactamente la misma cantidad de huesos y estos huesos conectados tienen los mismos nombres dos a dos. 10 | 11 | Ayude a Alex a encontrar un método con el que saber si un esqueleto arbitrario puede convertirse en una copia parecida a su criatura favorita sólo cambiándole los nombres a sus huesos. 12 | 13 | ### Statement 14 | 15 | Given two graphs, determine whether one graph can be transformed into the other by renaming vertices. 16 | 17 | ### Solution 18 | 19 | Reduces from: Clique 20 | Reduction Idea: Construct two graphs where the existence of a clique in one graph corresponds to an isomorphism in the other, allowing the determination of isomorphism through clique detection. 21 | -------------------------------------------------------------------------------- /Proyectos/old/2024/third-ex-statements/npc-Longest Path.md: -------------------------------------------------------------------------------- 1 | # DP 2 | 3 | ## Zombies 4 | 5 | En una ciudad infestada de zombis, los pocos supervivientes están intentando escapar. La ciudad está representada por un conjunto de intersecciones conectadas por calles, y cada camino tiene una longitud. 6 | 7 | Lázaro, uno de los supervivientes propone buscar el camino más corto en un mapa que encontró tirado por ahí. Cuando el grupo está a punto de partir, Jose se levanta y dice: "Tengo una idea mejor. En lugar de ir por el camino más corto, busquemos uno de los más largos, de al menos tamaño $k$. Así sorprenderemos a los zombies, nunca dejes que sepan tu próximo movimiento". 8 | 9 | El grupo de brillantes supervivientes comenzó a aplaudir asombrado, mientras que lázaro se quedaba frío pensando "¿de cuando acá los zombies pueden razonar?" 10 | 11 | Ayude al grupo encontrando, dado un mapa de intersecciones y calles, si existe un camino simple de tamaño al menos $k$. 12 | 13 | (PD: De más está decir que todo el grupo murió entre terribles sufrimientos). 14 | 15 | ### Statement 16 | 17 | Given a graph and an integer $$ k $$, does there exist a simple path of length at least $$ k $$? 18 | 19 | ### Solution 20 | 21 | Reduces from: Hamiltonian Path 22 | Reduction Idea: Transform the Hamiltonian path problem into the longest path problem by setting $$ k $$ to the number of vertices minus one, ensuring that the existence of a Hamiltonian path corresponds to a long path. 23 | -------------------------------------------------------------------------------- /Proyectos/old/2024/third-ex-statements/npc-Minimum Weight Vertex Cover.md: -------------------------------------------------------------------------------- 1 | # DP 2 | 3 | ## Tesoro pirata 4 | 5 | En una isla desierta, un grupo de piratas ha trazado un mapa lleno de senderos secretos. Cada sendero tiene un tesoro escondido en alguna parte de su trayecto. Los piratas de la tripulación del infame capitán Jack Navarro quieren esconderse en las intersecciones de los senderos para vigilar sus tesoros. En una intersección se pueden cruzar dos senderos o más. Todas las intersecciones tienen unas palmeras a las que los piratas se pueden encaramar. Mientras más alta la palmera, más difícil es subirse y por tanto más costo tiene. 6 | 7 | Tu misión es ayudar a los piratas a encontrar el conjunto mínimo de intersecciones donde deben esconderse para poder vigilar todos los senderos que llevan a sus tesoros y que el costo de subirse en las palmas sea mínimo. 8 | 9 | ### Statement 10 | 11 | Given a weighted graph, find the minimum weight subset of vertices that covers all edges. 12 | 13 | ### Solution 14 | 15 | Reduces from: Vertex Cover 16 | Reduction Idea: Transform the unweighted vertex cover problem into a weighted version by assigning weights based on the original vertex cover, ensuring that the minimum weight solution corresponds to the vertex cover. 17 | -------------------------------------------------------------------------------- /Proyectos/old/2024/third-ex-statements/npc-Multicolored Clique.md: -------------------------------------------------------------------------------- 1 | # DP 2 | 3 | ## Alianza de Robots Multicolores 4 | 5 | En una futurística ciudad llena de robots, cada robot pertenece a una facción identificada por un color específico. Los robots de diferentes facciones están buscando formar una alianza estratégica. Esta alianza debe ser un grupo de robots donde todos estén conectados entre sí, y lo más importante: debe haber al menos un robot de cada color en esta alianza. 6 | 7 | Dado un grafo donde cada vértice representa a un robot y cada vértice tiene un color que indica su facción, tu tarea es determinar si existe una "clique" (un grupo completamente conectado) que contenga al menos un robot de cada color. 8 | 9 | ¿Podrán los robots de todas las facciones unirse en una poderosa alianza multicolor? 10 | 11 | ### Statement 12 | 13 | Given a graph where each vertex is assigned a color, does there exist a clique containing at least one vertex of each color? 14 | 15 | ### Solution 16 | 17 | Reduces from: Clique 18 | Reduction Idea: Transform an instance of the clique problem by assigning colors to vertices in a way that ensures finding a multicolored clique corresponds to finding a regular clique. 19 | -------------------------------------------------------------------------------- /Proyectos/old/2024/third-ex-statements/npc-Set Packing.md: -------------------------------------------------------------------------------- 1 | # DP 2 | 3 | ## Estrategia de Batallones en la Guerra 4 | 5 | En medio de una gran guerra, los generales están planeando una estrategia con sus batallones. Cada batallón controla un área específica del territorio, y algunos de estos territorios pueden superponerse, lo que crea conflictos de control entre los batallones. 6 | 7 | Dada una colección finita $C$ de territorios controlados por los batallones, y un número entero positivo $k \leq |C|$, tu misión es determinar si es posible organizar al menos $k$ batallones de manera que cada uno controle un territorio completamente distinto de los demás, es decir, sin superposiciones ni conflictos entre ellos. 8 | 9 | ### Statement 10 | 11 | Dada una colección finita C de conjuntos y un entero positivo $k \leq |C|$. ¿Tiene C al menos k conjuntos mutuamente disjuntos? 12 | 13 | ### Solution 14 | 15 | Reduces from: Exact Cover 16 | Reduction Idea: Construct an instance of set packing from an exact cover problem by ensuring that the sets in the packing problem correspond to the subsets in the exact cover, maintaining disjointness. 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Diseño y Análisis de Algoritmos 2 | 3 | Conferencias, ejemplos, notas, ejercicions, y más, sobre la asignatura Diseño y Análisis de Algoritmos 4 | 5 | ## Orientación del Proyecto 6 | 7 | - [Proyecto DAA - 2024](Proyectos/2024.md) 8 | 9 | ## Problemas 10 | 11 | - [NP-Completitud](Problems/np.md) 12 | 13 | ## Evaluaciones 14 | 15 | La evaluación del curso es basada en habilidades. El estudiante debe demostrar habilidades generales para el diseño y análisis de algoritmos, así como dominar las técnicas de solución de problemas por las estrategias greedy, programación dinámica, divide & conquer, y algoritmos de aproximación. Además, habilidades para la formalización y demostración de correctitud de algoritmos, demostración de cotas mínimas, y demostración de NP-completitud. 16 | 17 | Durante el curso hay tres tipos de evaluaciones formales: 18 | 19 | - Examen intrasemestral 20 | - Problemas extraclase 21 | - Proyecto 22 | 23 | Los estudiantes que no demuestren las habilidades mínimas del curso al finalizar la evaluación del proyecto, tendrán la oportunidad de presentarse a un examen extraordinario, y un examen mundial, escritos. 24 | --------------------------------------------------------------------------------