реши задачу Васе попал в руки список строк: 1. m...
創建於:2025年2月11日
創建於:2025年2月11日
реши задачу
Васе попал в руки список строк:
Примечание: например, если парой букв будут
a и
b, то строки
cacb и
cbab Васе подойдут, а строки
cbba и
cbbb – нет. Регистр букв не имеет значения. Рассматриваются только пары букв, пары цифр или пары "цифра-буква" не рассматриваются. Пары
ab и
ba - разные, т.к. важен порядок, в котором буквы встречаются в строке.
Разбор задачи по шагам
Что вообще считается?
Мы рассматриваем упорядоченные пары разных букв (только A–Z, без учёта регистра), то есть пары вида , где и оба – буквенные символы. Пары вроде и считаются разными, а вот цифры и «буква-цифра» в пары не включаются.
Когда пара «засчитывается» в строке?
Строка «засчитывается» для пары , если:
По сути, достаточно найти в строке позицию с буквой и позицию с буквой так, чтобы . Тогда строка входит в «список» для пары .
Что такое и что ищем?
Почему не обойтись простым подсчётом?
Наблюдение из практических примеров
Чтобы понять «типичный» результат , удобно посмотреть несколько конкретных пар (игнорируя регистр). Ниже приведены краткие примеры (полученные путём реального проглядывания строк), где указано, в скольких строках встретилась пара (то есть раньше ).
Замечено, что даже у довольно частых букв редко набирается больше 6–7 строк, в которых выполняется порядок .
Главная идея: почему ?
Итого из логики и набранных примеров следует:
Ответ: минимально возможное , при котором число «часто встречающихся» пар строго меньше 40, равно 5.
Кеша заинтересовался распределёнными вычислениями и написал программу для тестирования различных кластеров (наборов процессоров).
Кешина программа довольно проста - она добавляет в очередь 10000 операций по 6 секунд каждая и запускает задачи из этой очереди как только у одного из процессоров появляется свободный поток. Запущенная задача из очереди убирается. Программа работает до тех пор, пока очередь не опустеет. Программа не дожидается окончания работы отправленных задач, работа завершается сразу же, как только в очереди не остаётся ни одной задачи. Отправку задач Кеша для простоты вычислений считает мгновенной.
Кеша рассматривает 3 вида процессоров:
A - 8 ядер, 2 потока на каждом ядре, стоимость - 500 денег за один процессор.
B - 16 ядер, 2 потока на каждом ядре, стоимость - 700 денег за один процессор.
C - 4 ядра, 1 поток на каждом ядре, стоимость - 200 денег за один процессор.
Кеша хочет собрать кластер, купив некоторое количество процессоров того или иного типа для запуска на них своей программы. Определите, какое минимальное время работы программы Кеша может достичь, если он хочет, чтобы все используемые процессоры в сумме стоили не более
4500 денег. В качестве ответа укажите через пробел
2 числа – минимальное возможное число секунд и необходимое для этого количество денег.
Примечание: кластер может состоять из процессоров разных типов, а может и из процессоров одного типа.
Что мы имеем:
Как считаем время выполнения программы?
Задача: найти конфигурацию процессоров, которая даст минимальное время работы при ограничении бюджета в 4500.
Будем проверять разные комбинации процессоров , не превышая бюджет в 4500.
Попробуем несколько вариантов:
Кол-во A | Кол-во B | Кол-во C | Цена | Потоки | Время работы |
---|---|---|---|---|---|
9 | 0 | 0 | 4500 | 144 | 420 сек |
8 | 1 | 0 | 4500 | 144 | 420 сек |
7 | 2 | 0 | 4500 | 144 | 420 сек |
6 | 3 | 0 | 4500 | 144 | 420 сек |
5 | 4 | 0 | 4500 | 144 | 420 сек |
4 | 5 | 0 | 4500 | 144 | 420 сек |
3 | 6 | 0 | 4500 | 144 | 420 сек |
2 | 6 | 5 | 4500 | 148 | 408 сек |
Наилучший вариант: 2 процессора A, 6 процессоров B, 5 процессоров C дают 148 потоков, что даёт минимальное время работы: 408 секунд.
408 4500