Задачи районно-городских командных соревнований 2005
1. Парковка
Ограничения: время – 1s/2s, память – 32MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод
Послать решение Blockly Посылки Темы Где Обсудить (0)
Вы хотите запарковать машины гостей, приехавших на вечеринку, на улице. Согласно правилам нельзя парковать машины
- перед частным выездом;
- на остановке автобуса, а также менее чем в 10 метрах до нее;
- на пешеходном переходе, а также менее чем в 5 метрах до него или после него.
Вы составили планы окрестных улиц, разбив их на участки длиной 5 метров (это минимальная длина для парковки автомобиля). Участок с выездом на плане обозначается символом 'D', автобусные остановки – 'B', переходы – 'S', прочие – '-'. Напишите программу, которая для каждой улицы определит число парковочных мест.
В первой строке входного файла содержится число `N` (`1\ ≤\ N\ ≤\ 100`)- число улиц. Далее следует `N` строк, содержащих планы улиц, каждая строка имеет длину от 1 до 50 символов и состоит только из символов 'D', 'B', 'S' и '-'.
В выходной файл вывести для каждого плана улицы вывести строку, содержащую одно число – количество парковочных мест.
Пример ввода
3
---B--S-D--S--
DDBDDBDDBDD
--S--S--S--S--
Пояснение к первому примеру:
---B--S-D--S--
^ ^ ^ ^ направление движения транспорта ->
| | | | слева направо
4 места возможных парковок
2. Кроссворд
Ограничения: время – 1s/2s, память – 32MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод
Послать решение Blockly Посылки Темы Где Обсудить (0)
Вы нарисовали сетку для кроссворда, и теперь необходимо заполнить его словами. Для этого необходимо знать, сколько в кроссворде слов определенной длины. Напишите программу, выполняющую такие расчеты.
Во входном файле несколько тестов. В первой строке каждого теста содержатся два целых числа `N` и `M` через пробел – размеры сетки кроссворда (`3\ ≤\ N\ ≤\ 50`, `3\ ≤\ M\ ≤\ 50`). Далее следует `N` строк, содержащих по `M` символов '.' (пустая клетка) и 'X' (черная, неиспользуемая клетка). Строка, содержащая "0 0", сигнализирует о завершении набора тестов и не обрабатывается.
В выходной файл для каждого теста вывести строку, содержащую информацию о количестве слов каждой длины в форме `L-K` через пробел в порядке возрастания `L`, где `L` – длина слова (`L\ ≥\ 2`), `K` – количество слов такой длины (`K\ >\ 0`).
Пример ввода
5 6
X....X
X.XX.X
...X..
X.XX.X
..X...
3 3
...
...
...
0 0
Вывод для примера
2-2 3-2 4-1 5-2
3-6
3. Новый компилятор
Ограничения: время – 1s/2s, память – 32MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод
Послать решение Blockly Посылки Темы Где Обсудить (0)
Вам необходимо преобразовать множество старых программ для новой версии компилятора. Для этого необходимо заменить "->" на "." везде, кроме комментариев. Комментарии в данном языке программирования начинаются с символов "//" и продолжаются до конца строки. Напишите программу, выполняющую такое преобразование.
Входной файл содержит от 1 до 500 строк длиной не более 50 символов с ASCII-кодами от 32 до 127 – текст программы, которую нужно преобразовать.
В выходной файл вывести преобразованный текст программы.
Пример ввода
Test* t = new Test();
t->a = 1;
t->b = 2;
t->go(); // a=1, b=2 -> a=2, b=3
Вывод для примера
Test* t = new Test();
t.a = 1;
t.b = 2;
t.go(); // a=1, b=2 -> a=2, b=3
4. Секретный бункер
Ограничения: время – 2s/4s, память – 32MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод
Послать решение Blockly Посылки Темы Где Обсудить (0)
Имеется план секретного бункера в виде прямоугольного поля, на котором местоположение бомб отмечено символом '*', секретных объектов – символом '?', а пустые клетки – символом '.'. В случае опасности подрыв любой бомбы должен приводить к уничтожению секретных объектов. Бомба при взрыве уничтожает все объекты, для которых расстояние от центра клетки с бомбой до центра клетки с объектом меньше или равно `D`. Если в пределах действия бомбы оказывается другая бомба, она также взрывается.
Напишите программу, вычисляющую минимальное значение `D`, при котором взрыв любой бомбы приводит к уничтожению всех секретных объектов.
Во входном файле несколько тестов. В первом строке каждого теста содержатся два целых числа `N` и `M` через пробел – размеры плана бункера (`1\ ≤\ N\ ≤\ 50`, `1\ ≤\ M\ ≤\ 50`). Далее следует `N` строк, содержащих по `M` символов '.', '*' и '?'. План содержит от 1 до 100 символов '?' и от 1 до 100 символов '*'. Строка, содержащая "0 0", сигнализирует о завершении набора тестов и не обрабатывается.
В выходной файл для каждого теста вывести строку, содержащую одно вещественное число – минимальное значение D для соответствующего плана с точностью `10^{-6}`.
Пример ввода
2 3
*.*
.?.
5 5
*****
.?.?.
..?..
.?.?.
*****
0 0
Вывод для примера
1.414214
3.000000
5. Минимизация шаблона
Ограничения: время – 1s/2s, память – 32MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод
Послать решение Blockly Посылки Темы Где Обсудить (0)
Для поиска слов, состоящих из латинских букв, в некотором словаре используется шаблон, в котором '?' означает ровно один произвольный символ, а '*' – ноль или более произвольных символов. Некоторые шаблоны являются эквивалентными, то есть соответствуют одинаковому множеству слов. Например, оба шаблона "*??*a" и "?*?a" соответствуют словам из трех или более букв, оканчивающимся на букву 'a', но второй шаблон короче.
Напишите программу, которая находит самый короткий шаблон, эквивалентный заданному.
Входной файл содержит несколько шаблонов длиной от 1 до 50 символов, состоящих из латинских букв и символов '?' и '*'. Каждый шаблон записан на отдельной строке.
В выходной файл для каждого шаблона вывести на соответствующей строке его минимальный эквивалент. Если существует несколько вариантов, вывести первый в лексикографическом порядке ('*' идет в алфавите раньше '?')
Пример ввода
*??*a
T***nd?*
*?*?*?*
Вывод для примера
*??a
T*nd*?
*???
6. Палочки
Ограничения: время – 1s/2s, память – 32MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод
Послать решение Blockly Посылки Темы Где Обсудить (0)
У Боба есть несколько палочек разной длины. Он хочет сложить из них
многоугольник, соединяя вершины палочек. Боб может не использовать все палочки.
Напишите программу, определяющую, может ли Боб сложить из своего набора палочек
многоугольник.
Во входном файле несколько тестов. В первом строке каждого теста содержится
целое число `N` – количество палочек (`3\ ≤\ N\ ≤\ 20`). Во второй строке содержатся
`N` положительных вещественных чисел (меньше `10^7`, с тремя знаками после точки), разделенных пробелами – длины палочек. Строка, содержащая "0", сигнализирует о завершении набора тестов и не обрабатывается.
В выходной файл для каждого теста вывести на соответствующей строке "YES", если Боб может сложить многоугольник, иначе "NO".
Пример ввода
3
1.455 2.958 4.424
7
1.230 2.577 3.411 2.968 5.301 4.398 6.777
0
7. Тосты
Ограничения: время – 1s/2s, память – 32MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод
Послать решение Blockly Посылки Темы Где Обсудить (0)
Вы хотите поджарить несколько тостов для предстоящей вечеринки. Имеется
сковорода, на которой может жариться одновременно `K` тостов.
Поджаривание тоста с одной стороны занимает 2 минуты. Будем считать, что операции
размещения тоста на сковороде, переворачивания и снятия тоста со сковороды
выполняются мгновенно. Напишите программу,
вычисляющую минимальное время в минутах для поджаривания `N` тостов.
Тосты нельзя снимать со сковороды раньше или позже 2 минут,
необходимых для поджаривания одной стороны. Каждый тост нужно поджарить с обеих сторон.
В первой строке входного файла содержатся два целых числа `N` и `K`, разделенных пробелом
(`0\ ≤\ N\ ≤\ 1000`, `1\ ≤\ K\ ≤\ 50`) – количество тостов и вместимость сковороды.
В выходной файл вывести одно целое число – минимальное время в минутах для поджаривания `N` тостов.
8. Угадай число
Ограничения: время – 1s/2s, память – 32MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод
Послать решение Blockly Посылки Темы Где Обсудить (0)
Боб и его старший брат Альберт часто играют в игру "Угадай число". Сначала Боб загадывает число `K` в диапазоне от 1 до `N`. Потом Альберт называет числа, а Боб говорит, является названное число больше или меньше загаданного или Альберт назвал правильное число. Альберт для угадывания всегда использует следующую стратегию.
1 шаг. Альберт задает `A=1` и `B=N`
2 шаг. Альберт вычисляет `M` – целую часть среднего арифметического чисел `A` и `B`
3 шаг. Альберт называет число `M`
4 шаг. Если Боб говорит "Меньше", то Альберт полагает `A=M+1` и переходит к шагу 2
5 шаг. Если Боб говорит "Больше", то Альберт полагает `B=M-1` и переходит к шагу 2
6 шаг. Если Боб говорит "Угадал", то игра заканчивается
Например, пусть `N=9`, а задуманное Бобом число `K` равно 6. Сначала `A=1`, `B=9`.
Альберт называет число 5 и получает ответ "Меньше". Теперь `A=6`, `B=9`.
Следующее число-попытка 7. Боб отвечает "Больше". Теперь `A=6`, `B=6`. Альберт называет 6
и получает ответ "Угадал".
Напишите программу, которая определяет, сколько чисел придется назвать Альберту,
прежде чем он получит ответ "Угадал" от Боба.
В первой строке входного файла содержатся два целых числа `N` (`1\ ≤\ N\ ≤\ 1000`) и `K` (`1\ ≤\ K\ ≤\ N`), разделенных пробелом.
В выходной файл вывести одно целое число – количество названных Альбертом чисел до получения ответа Боба "Угадал".