|
1 |
| -# Алгоритмы и струткуры данных |
| 1 | +# Алгоритмы и структуры данных |
2 | 2 |
|
3 | 3 | ## Введение в алгоритмы с финальными задачами.
|
4 | 4 |
|
5 |
| ---- |
6 |
| - |
7 | 5 | <details>
|
8 | 6 | <summary>
|
9 | 7 | <b>Значения функции (<a href="intro_algorithms/a_function_values.py">a_function_values.py</a></b>)
|
10 | 8 | </summary>
|
11 | 9 |
|
12 | 10 | #### Условие:
|
13 | 11 | [Ссылка](https://contest.yandex.ru/contest/23389/problems/A/)
|
| 12 | + |
14 | 13 | Вася делает тест по математике: вычисляет значение функций в различных точках.
|
15 | 14 | Стоит отличная погода, и друзья зовут Васю гулять. Но мальчик решил сначала
|
16 | 15 | закончить тест и только после этого идти к друзьям. К сожалению, Вася пока
|
|
52 | 51 |
|
53 | 52 | #### Условие:
|
54 | 53 | [Ссылка](https://contest.yandex.ru/contest/23389/problems/B/)
|
| 54 | + |
55 | 55 | Представьте себе онлайн-игру для поездки в метро: игрок нажимает на кнопку,
|
56 | 56 | и на экране появляются три случайных числа. Если все три числа оказываются
|
57 | 57 | одной чётности, игрок выигрывает.
|
|
91 | 91 |
|
92 | 92 | #### Условие:
|
93 | 93 | [Ссылка](https://contest.yandex.ru/contest/23389/problems/C/)
|
| 94 | + |
94 | 95 | Дана матрица. Нужно написать функцию, которая для элемента возвращает
|
95 | 96 | всех его соседей. Соседним считается элемент, находящийся от текущего
|
96 | 97 | на одну ячейку влево, вправо, вверх или вниз. Диагональные элементы
|
|
143 | 144 |
|
144 | 145 | #### Условие:
|
145 | 146 | [Ссылка](https://contest.yandex.ru/contest/23389/problems/D/)
|
| 147 | + |
146 | 148 | Метеорологическая служба вашего города решила исследовать погоду новым способом.
|
147 | 149 | Под температурой воздуха в конкретный день будем понимать максимальную
|
148 | 150 | температуру в этот день.
|
|
191 | 193 |
|
192 | 194 | #### Условие:
|
193 | 195 | [Ссылка](https://contest.yandex.ru/contest/23389/problems/E/)
|
| 196 | + |
194 | 197 | Чтобы подготовиться к семинару, Гоше надо прочитать статью по эффективному
|
195 | 198 | менеджменту. Так как Гоша хочет спланировать день заранее, ему необходимо
|
196 | 199 | оценить сложность статьи.
|
|
236 | 239 |
|
237 | 240 | #### Условие:
|
238 | 241 | [Ссылка](https://contest.yandex.ru/contest/23389/problems/F/)
|
| 242 | + |
239 | 243 | Помогите Васе понять, будет ли фраза палиндромом. Учитываются только буквы и
|
240 | 244 | цифры, заглавные и строчные буквы считаются одинаковыми.
|
241 | 245 |
|
|
277 | 281 |
|
278 | 282 | #### Условие:
|
279 | 283 | [Ссылка](https://contest.yandex.ru/contest/23389/problems/G/)
|
| 284 | + |
280 | 285 | Вася реализовал функцию, которая переводит целое число из десятичной системы в
|
281 | 286 | двоичную. Но, кажется, она получилась не очень оптимальной.
|
282 | 287 | Попробуйте написать более эффективную программу.
|
|
634 | 639 |
|
635 | 640 | ## Основные структуры данных с финальными задачами.
|
636 | 641 |
|
637 |
| ---- |
638 |
| - |
639 | 642 | <details>
|
640 | 643 | <summary>
|
641 | 644 | <b>Мониторинг (<a href="basic_data_structures/a_monitoring.py">a_monitoring.py</a></b>)
|
@@ -1254,8 +1257,6 @@ Value — целое число, по модулю не превосходяще
|
1254 | 1257 |
|
1255 | 1258 | ## Рекурсии и сортировки с финальными задачами.
|
1256 | 1259 |
|
1257 |
| ---- |
1258 |
| - |
1259 | 1260 | <details>
|
1260 | 1261 | <summary>
|
1261 | 1262 | <b>Генератор скобок (<a href="recursion_and_sorting/a_gen_bracket.py">a_gen_bracket.py</a></b>)
|
@@ -1935,4 +1936,268 @@ Fi и Pi — целые числа, лежащие в диапазоне от 0
|
1935 | 1936 |
|
1936 | 1937 | </details>
|
1937 | 1938 |
|
1938 |
| ---- |
| 1939 | +--- |
| 1940 | + |
| 1941 | +## Хеш-функции |
| 1942 | + |
| 1943 | + |
| 1944 | +<details> |
| 1945 | +<summary> |
| 1946 | +<b>Полиномиальный хеш (<a href="hash-finctions/a_Polynomial_hash.py">a_Polynomial_hash.py</a></b>) |
| 1947 | +</summary> |
| 1948 | + |
| 1949 | +#### Условие: |
| 1950 | +[Ссылка](https://contest.yandex.ru/contest/26205/problems/A/) |
| 1951 | + |
| 1952 | +Алле очень понравился алгоритм вычисления полиномиального хеша. Помогите ей написать функцию, вычисляющую хеш строки s. В данной задаче необходимо использовать в качестве значений отдельных символов их коды в таблице ASCII. |
| 1953 | +Полиномиальный хеш считается по формуле: |
| 1954 | + |
| 1955 | +`h(s) = (s1a^n-1 + s2a^n-2 + ... + sn-1a + sn) mod m` |
| 1956 | + |
| 1957 | +#### Формат ввода |
| 1958 | +В первой строке дано число a (1 ≤ a ≤ 1000) –— основание, по которому считается хеш. |
| 1959 | + |
| 1960 | +Во второй строке дано число m (1 ≤ m ≤ 109) –— модуль. |
| 1961 | + |
| 1962 | +В третьей строке дана строка s (0 ≤ |s| ≤ 106), состоящая из больших и маленьких латинских букв. |
| 1963 | + |
| 1964 | +#### Формат вывода |
| 1965 | +Выведите целое неотрицательное число –— хеш заданной строки. |
| 1966 | + |
| 1967 | +#### Пример |
| 1968 | +<table><tbody> |
| 1969 | + <tr> |
| 1970 | + <td><b>Ввод</b></td> |
| 1971 | + <td><b>Вывод</b></td> |
| 1972 | + </tr> |
| 1973 | + <tr> |
| 1974 | + <td valign="top"> |
| 1975 | + 123<br> |
| 1976 | + 100003<br> |
| 1977 | + a<br> |
| 1978 | + </td> |
| 1979 | + <td valign="top"> |
| 1980 | + 97<br> |
| 1981 | + </td> |
| 1982 | + </tr> |
| 1983 | +</tbody></table> |
| 1984 | + |
| 1985 | +</details> |
| 1986 | + |
| 1987 | +--- |
| 1988 | + |
| 1989 | +<details> |
| 1990 | +<summary> |
| 1991 | +<b>Сломай меня (<a href="hash-finctions/b_crash_polynomial_hash.py">b_crash_polynomial_hash.py</a></b>) |
| 1992 | +</summary> |
| 1993 | + |
| 1994 | +#### Условие: |
| 1995 | +[Ссылка](https://contest.yandex.ru/contest/26205/problems/B/) |
| 1996 | + |
| 1997 | +Гоша написал программу, которая сравнивает строки исключительно по их хешам. Если хеш равен, то и строки равны. Тимофей увидел это безобразие и поручил вам сломать программу Гоши, чтобы остальным неповадно было. |
| 1998 | + |
| 1999 | +В этой задаче вам надо будет лишь найти две различные строки, которые для заданной хеш-функции будут давать одинаковое значение. |
| 2000 | + |
| 2001 | +`h(s) = (s1a^n-1 + s2a^n-2 + ... + sn-1a + sn) mod m` |
| 2002 | + |
| 2003 | +для a = 1000 и m = 123 987 123. |
| 2004 | +В данной задаче необходимо использовать в качестве значений отдельных символов их коды в таблице ASCII. |
| 2005 | +#### Формат ввода |
| 2006 | +В задаче единственный тест без ввода |
| 2007 | + |
| 2008 | +#### Формат вывода |
| 2009 | +Отправьте две строки, по одной в строке. Строки могут состоять только из маленьких латинских букв и не должны превышать в длину 1000 знаков каждая. Код отправлять не требуется. Строки из примера использовать нельзя. |
| 2010 | + |
| 2011 | +Пример вывода: |
| 2012 | + |
| 2013 | +ezhgeljkablzwnvuwqvp |
| 2014 | + |
| 2015 | +gbpdcvkumyfxillgnqrv |
| 2016 | + |
| 2017 | +#### Пример |
| 2018 | +<table><tbody> |
| 2019 | + <tr> |
| 2020 | + <td><b>Ввод</b></td> |
| 2021 | + <td><b>Вывод</b></td> |
| 2022 | + </tr> |
| 2023 | + <tr> |
| 2024 | + <td valign="top"> |
| 2025 | + <br> |
| 2026 | + </td> |
| 2027 | + <td valign="top"> |
| 2028 | + <br> |
| 2029 | + </td> |
| 2030 | + </tr> |
| 2031 | +</tbody></table> |
| 2032 | + |
| 2033 | +</details> |
| 2034 | + |
| 2035 | +--- |
| 2036 | + |
| 2037 | +<details> |
| 2038 | +<summary> |
| 2039 | +<b>Префиксные хеши (<a href="hash-finctions/c_prefix_hash.py">.py</a></b>) |
| 2040 | +</summary> |
| 2041 | + |
| 2042 | +#### Условие: |
| 2043 | +[Ссылка](https://contest.yandex.ru/contest/26205/problems/C/) |
| 2044 | + |
| 2045 | +Алла не остановилась на достигнутом –— теперь она хочет научиться быстро вычислять хеши произвольных подстрок данной строки. Помогите ей! |
| 2046 | +На вход поступают запросы на подсчёт хешей разных подстрок. Ответ на каждый запрос должен выполняться за O(1). Допустимо в начале работы программы сделать предподсчёт для дальнейшей работы со строкой. |
| 2047 | +Напомним, что полиномиальный хеш считается по формуле |
| 2048 | + |
| 2049 | +`h(s) = (s1a^n-1 + s2a^n-2 + ... + sn-1a + sn) mod m` |
| 2050 | + |
| 2051 | +#### Формат ввода |
| 2052 | +В первой строке дано число a (1 ≤ a ≤ 1000) –— основание, по которому считается хеш. Во второй строке дано число m (1 ≤ m ≤ 10^7) –— модуль. В третьей строке дана строка s (0 ≤ |s| ≤ 10^6), состоящая из больших и маленьких латинских букв. |
| 2053 | + |
| 2054 | +В четвертой строке дано число запросов t –— натуральное число от 1 до 10^5. В каждой из следующих t строк записаны через пробел два числа l и r –— индексы начала и конца очередной подстроки. (1 ≤ l ≤ r ≤ |s|). |
| 2055 | + |
| 2056 | +#### Формат вывода |
| 2057 | +Для каждого запроса выведите на отдельной строке хеш заданной в запросе подстроки. |
| 2058 | + |
| 2059 | +#### Пример |
| 2060 | +<table><tbody> |
| 2061 | + <tr> |
| 2062 | + <td><b>Ввод</b></td> |
| 2063 | + <td><b>Вывод</b></td> |
| 2064 | + </tr> |
| 2065 | + <tr> |
| 2066 | + <td valign="top"> |
| 2067 | + 1000<br> |
| 2068 | + 1000009<br> |
| 2069 | + abcdefgh<br> |
| 2070 | + 7<br> |
| 2071 | + 1 1<br> |
| 2072 | + 1 5<br> |
| 2073 | + 2 3<br> |
| 2074 | + 3 4<br> |
| 2075 | + 4 4<br> |
| 2076 | + 1 8<br> |
| 2077 | + 5 8<br> |
| 2078 | + </td> |
| 2079 | + <td valign="top"> |
| 2080 | + 97<br> |
| 2081 | + 225076<br> |
| 2082 | + 98099<br> |
| 2083 | + 99100<br> |
| 2084 | + 100<br> |
| 2085 | + 436420<br> |
| 2086 | + 193195<br> |
| 2087 | + </td> |
| 2088 | + </tr> |
| 2089 | +</tbody></table> |
| 2090 | + |
| 2091 | +</details> |
| 2092 | + |
| 2093 | +--- |
| 2094 | + |
| 2095 | +<details> |
| 2096 | +<summary> |
| 2097 | +<b>Кружки (<a href="hash-finctions/d_sections.py">d_sections.py</a></b>) |
| 2098 | +</summary> |
| 2099 | + |
| 2100 | +#### Условие: |
| 2101 | +[Ссылка](https://contest.yandex.ru/contest/26205/problems/D/) |
| 2102 | + |
| 2103 | +В компании, где работает Тимофей, заботятся о досуге сотрудников и устраивают различные кружки по интересам. Когда кто-то записывается на занятие, в лог вносится название кружка. |
| 2104 | + |
| 2105 | +По записям в логе составьте список всех кружков, в которые ходит хотя бы один человек. |
| 2106 | + |
| 2107 | +#### Формат ввода |
| 2108 | +В первой строке даётся натуральное число n, не превосходящее 10 000 –— количество записей в логе. |
| 2109 | + |
| 2110 | +В следующих n строках —– названия кружков. |
| 2111 | + |
| 2112 | +#### Формат вывода |
| 2113 | +Выведите уникальные названия кружков по одному на строке, в порядке появления во входных данных. |
| 2114 | + |
| 2115 | +#### Пример |
| 2116 | +<table><tbody> |
| 2117 | + <tr> |
| 2118 | + <td><b>Ввод</b></td> |
| 2119 | + <td><b>Вывод</b></td> |
| 2120 | + </tr> |
| 2121 | + <tr> |
| 2122 | + <td valign="top"> |
| 2123 | + 8<br> |
| 2124 | + вышивание крестиком<br> |
| 2125 | + рисование мелками на парте<br> |
| 2126 | + настольный керлинг<br> |
| 2127 | + настольный керлинг<br> |
| 2128 | + кухня африканского племени ужасмай<br> |
| 2129 | + тяжелая атлетика<br> |
| 2130 | + таракановедение<br> |
| 2131 | + таракановедение<br> |
| 2132 | + </td> |
| 2133 | + <td valign="top"> |
| 2134 | + вышивание крестиком<br> |
| 2135 | + рисование мелками на парте<br> |
| 2136 | + настольный керлинг<br> |
| 2137 | + кухня африканского племени ужасмай<br> |
| 2138 | + тяжелая атлетика<br> |
| 2139 | + таракановедение<br> |
| 2140 | + </td> |
| 2141 | + </tr> |
| 2142 | +</tbody></table> |
| 2143 | + |
| 2144 | +</details> |
| 2145 | + |
| 2146 | +--- |
| 2147 | + |
| 2148 | +<details> |
| 2149 | +<summary> |
| 2150 | +<b>Подстроки (<a href="hash-finctions/e_substring.py">e_substring.py</a></b>) |
| 2151 | +</summary> |
| 2152 | + |
| 2153 | +#### Условие: |
| 2154 | +[Ссылка](https://contest.yandex.ru/contest/26205/problems/E/) |
| 2155 | + |
| 2156 | +На вход подается строка. Нужно определить длину наибольшей подстроки, которая не содержит повторяющиеся символы. |
| 2157 | + |
| 2158 | +#### Формат ввода |
| 2159 | +Одна строка, состоящая из строчных латинских букв. Длина строки не превосходит 10 000. |
| 2160 | + |
| 2161 | +#### Формат вывода |
| 2162 | +Выведите натуральное число —– ответ на задачу. |
| 2163 | + |
| 2164 | +#### Пример |
| 2165 | +<table><tbody> |
| 2166 | + <tr> |
| 2167 | + <td><b>Ввод</b></td> |
| 2168 | + <td><b>Вывод</b></td> |
| 2169 | + </tr> |
| 2170 | + <tr> |
| 2171 | + <td valign="top"> |
| 2172 | + abcabcbb<br> |
| 2173 | + </td> |
| 2174 | + <td valign="top"> |
| 2175 | + 3<br> |
| 2176 | + </td> |
| 2177 | + </tr> |
| 2178 | +</tbody></table> |
| 2179 | + |
| 2180 | +</details> |
| 2181 | + |
| 2182 | +--- |
| 2183 | + |
| 2184 | +## Деревья |
| 2185 | + |
| 2186 | + |
| 2187 | +<details> |
| 2188 | +<summary> |
| 2189 | +<b>Лампочки (<a href="trees/a_lamps.py">a_lamps.py</a></b>) |
| 2190 | +</summary> |
| 2191 | + |
| 2192 | +#### Условие: |
| 2193 | +[Ссылка](https://contest.yandex.ru/contest/26207/problems/A/) |
| 2194 | + |
| 2195 | +Гоша повесил на стену гирлянду в виде бинарного дерева, в узлах которого находятся лампочки. У каждой лампочки есть своя яркость. Уровень яркости лампочки соответствует числу, расположенному в узле дерева. Помогите Гоше найти самую яркую лампочку в гирлянде, то есть такую, у которой яркость наибольшая. |
| 2196 | + |
| 2197 | +#### Формат ввода |
| 2198 | +На вход подается корень дерева. |
| 2199 | + |
| 2200 | +#### Формат вывода |
| 2201 | +Функция должна вернуть максимальное значение яркости в узле дерева. |
| 2202 | + |
| 2203 | +</details> |
0 commit comments