Задания к чемпионату по спортивному программированию
Напоминаем про условия выполнения и всему такому, посмотреть можно в статье.
Все задачи продублированы в гуглдок.
РЕШЕНИЯ ПРИНИМАЮТСЯ ДО 18:30 25.04.2025 ПО ЕКАТЕРИНБУРГУ НА ПОЧТУ tkm@urtisi.ru (работы, высланные позже, оцениваться не будут), В ТЕМЕ УКАЗЫВАЙТЕ !ЧСП_Фамилия_НомерЗадания
Задание 1: Дана строка. Проверьте, является ли она палиндромом (читается одинаково слева направо и справа налево).
p.s. эта задача простая, поэтому примеров не будет, для разогрева :)
Задание 2: Введите с клавиатуры 2 строки и определите, изоморфны ли они. Две строки считаются изоморфными, если символы в строке A можно заменить чтобы получить строку B. Все вхождения символа должны быть заменены другим символом с сохранением порядка символов.
Пример 1: A = «seed», B = «room»; Ответ = true.
Пример 2: А = «tool», B = «read»; Ответ = false.
Задание 3: Учитывая сумму и наибольший общий делитель (НОД) двух чисел, верните эти два числа в порядке возрастания. Если числа не существуют, то верните -1.
Пример:
Sum = 12; gcd = 4;
Solve(12,4) = [4,8]. Эти два числа 4 и 8 в сумме дают 12 и имеют НОД 4.
Solve(12,5) = -1. Не существует двух чисел, сумма которых равна 12 и НОД равен 5.
Solve(10,2) = [2,8] OR [4,6]. Обратите внимание, что тут 2 решения, но выбираем первый вариант с меньшим первым элементом (2 < 4).
Задание 4: Реализуйте базовый преобразователь, который преобразует положительные целые числа между произвольными основаниями (binary, octal, decimal, hexadecimal). Примеры смотрите ниже.
Пример 1: Convert(«15», DECIMAL, BINARY) // Answer: 1111
Пример 2: Convert(«15», DECIMAL, OCTAL) // Answer: 17
Пример 3: Convert(«1010», BINARY, DECIMAL) // Answer: 10
Пример 4: Convert(«1010», BINARY, HEXADECIMAL) // Answer: A
Пример 5: Convert(«FF», HEXADECIMAL, DECIMAL) // Answer: 255
Пример 6: Convert(«377», OCTAL, BINARY) // Answer: 11111111
Пример 7: Convert(«777», OCTAL, HEXADECIMAL) // Answer: 1FF
Пример 8: Convert(«1A3», HEXADECIMAL, OCTAL) // Answer: 643
Задание 5: Представьте, что у вас есть цифровые часы, которые закрашивают весь экран одним цветом, а не показывают, который час.
Хотя это хорошо смотрится на вашей стене, и вы можете произвести впечатление на своих гостей, вы также хотите иметь возможность сказать, который сейчас час.
К счастью, часы также печатают шестнадцатеричный код в правом нижнем углу экрана. Используя это, вы сможете узнать время, что является еще одним способом произвести впечатление на ваших гостей :)
Шестнадцатеричный код придет к вам в таком формате: #0d242c
И вы вернете время в таком формате: чч:мм:сс
Примечание. Шестнадцатеричный код, который вам будет предоставлен, всегда будет в правильном формате. Однако это может не указывать на правильное время. Поэтому обязательно выдайте ошибку, если рассчитанное вами время неверно.
Пример:
hexToTime(‘#0d242c’); // ’13:36:44′
hexToTime(‘#0d373c’); // ’13:55:60′ – error
hexToTime(‘#0d3c37′); // ’13:60:55’ – error
Задание 6: Дана строка длины n. В начальный момент времени вы находитесь в позиции 1 (позиции нумеруются с единицы), на каждом шаге выполняется переход в другую позицию в соответствии с следующими правилами: если в строке есть еще одна или более позиций, буквы в которых совпадают с буквой в текущей позиции, то вы переходите случайную из них, иначе — двигаетесь на одну позицию вправо.
Можно ли выбраться из строки (под этим понимается, что вы в какой-то момент времени находитесь в позиции n после чего сдвигаетесь вправо) или же Вы попали в строковую ловушку, и вам придется блуждать по ней вечно?
Входные данные: в первой строке дано число n (1 ≤ n ≤ 105) — длина строки. Во второй строке дана строка s, строка состоит только из строчных букв латинского алфавита.
Выходные данные: выведите «YES», если выбраться из строки возможно, и «NO» — в противоположном случае.
Пример 1: n = 3, s = «abc», Answer: YES
Пример 2: n = 3, s = «aaa», Answer: NO
Задание 7: На бесконечной двумерной плоскости находится робот. Робот может выполнять следующие команды:
U (вверх): перемещает робота на одну клетку вверх.
D (вниз): перемещает робота на одну клетку вниз.
L (влево): перемещает робота на одну клетку влево.
R (вправо): перемещает робота на одну клетку вправо.
Дана строка S, представляющая последовательность команд, которую выполняет робот. Ваша задача — минимизировать количество команд, сохраняя конечную позицию робота неизменной.
Входные данные: одна строка S (1 ≤ s ≤ 1000) , состоящая из символов U, D, L, R.
Выходные данные: минимальная строка команд, которая приводит робота в ту же конечную позицию.
Пример 1: s = UUDDLRLR, Answer = «» // робот останется в том же месте
Пример 2: s = UUUURRRRDDDLLLL, Answer = U
Пример 3: s = UUUULLLDDRRRR, Answer = UR
Пример 4: s = UUUUDDLL, Answer = UULL
Задание 8: Представьте себе ситуацию. Вы – профессиональный грабитель, планирующий ограбить дома вдоль улицы. В каждом доме спрятана определенная сумма денег. Все дома в этом месте расположены по кругу (это означает, что первый дом является соседом последнего).
Между тем, в соседних домах подключена система безопасности, и она автоматически посылает уведомление полиции, если два соседних дома были взломаны в одну и ту же ночь.
Учитывая целочисленный массив nums, который представляет из себя сумму денег в каждом дома, верните максимальную сумму денег, которую вы можете получить с ограбления за текущий вечер, не предупредив полицию.
Пример 1: nums = [1,2,3]; Вывод = 3.
Пример 2: nums = [3,4,2]; Вы не можете ограбить дом 1 (money = 3), а затем ограбить дом 3 (money = 2), потому что это соседние дома. Поэтому ответом будет 4.
Пример 3: nums = [1,3,4,2]. Здесь 2 пути решения: ограбить дом 1 (money = 1) и затем ограбить дом 3 (money = 4). Дома 2 и 4 не трогаем из-за полиции. Итог = 5. Второе решение – грабим дом 2 (money = 3), затем грабим дом 4 (money = 2). Дома 1 и 3 не трогаем из-за полиции. Итог = 5.
Пример 4: nums = [1,2,3,1]. Так как денег больше в комбинации домов 1,3, следовательно грабим их. Итог = 4.
Пояснение: по требованиям задачи требуется получить максимальное число денег при ограблении, но по желанию можете расписать индексы домов, которые грабите (это больше проблема для примера №3).
Задание 9: Дан массив A из n чисел и число K. Найдите количество подмассивов и выведите их, сумма которых делится на K.
Пример 1: A = [4, 5, 0, -2, -3, 1], K = 5, вывод: 7 (подмассивы: [5], [5, 0], [0], [4, 5, 0, -2, -3, 1], [0, -2, -3], [-2, -3], [5, 0, -2, -3])
Пример 2: A = [1, 2, 3, 4, 5], K = 3, вывод: 6 (подмассивы: [3], [1, 2], [1, 2, 3], [2, 3, 4], [4, 5], [1, 2, 3, 4, 5])
Пример 3: A = [0, 0, 0], K = 1, вывод: 6 (подмассивы: [0], [0], [0], [0, 0], [0, 0], [0, 0, 0])
Пример 4: A = [7, 4, -10], K = 2, вывод: 2 (подмассивы: [4, -10], [-10])
Задание 10: Дается матрица MxN, верните значение true, если матрица является Теплициевой. В противном случае верните значение false.
Матрица является Теплициевой, если каждая диагональ от верхнего левого края до нижнего правого имеет одинаковые элементы.
Пример 1:
matrix = [
[1, 2, 3, 4],
[5, 1, 2, 3],
[9, 5, 1, 2]
], Answer: True
Пример 2:
matrix = [
[1, 2],
[2, 2]
], Answer: False
Пример 3:
matrix = [[1, 2, 3, 4]], Answer: True