Темы --> Информатика --> Алгоритмы --> Задачи на моделирование
---> 78 задач <---
Источники
    Личные олимпиады(938 задач)
    Командные олимпиады(684 задач)
Страница: << 8 9 10 11 12 13 14 >> Отображать по:
ограничение по времени на тест
1.0 second;
ограничение по памяти на тест
64 megabytes
Халява

Совсем недавно Али-Баба узнал от своего брата Касима об удивительной игре Го. В Го играют на прямоугольной доске – гобане, расчерченном вертикальными и горизонтальными линиями. Все линии пронумерованы. В игре участвуют два игрока, которые по очереди выставляют на гобан камни – специальные круглые фишки. Каждый камень ставится на незанятую точку пересечения линий доски (пересечения называют пунктами). У одного игрока – черные камни, у другого – белые. Камни одного цвета, смежные по вертикали, либо по горизонтали (но не диагонали), объединяются в группу. Одиночный камень также считается группой.

Один из способов набрать очки в Го – захватить камни противника. Каждый камень может иметь от двух до четырех смежных с ним пунктов (по вертикали и горизонтали, но не по диагонали). Если такой пункт не занят камнем, то он называется «дамэ». Дамэ группы – это все дамэ камней, составляющих группу. Как только оппонент своими камнями закрывает все дамэ чужой группы, то эта группа считается захваченной и снимается с доски. Если у группы осталось лишь одно дамэ, то говорят, что эта группа находится в «атари» т.е. на один шаг от захвата соперником.

Дамэ черных камней на рисунке отмечены крестиком. Группа черных из камней (1, 3) и (1, 4) имеет 4 дамэ. Группа (6, 1), (6, 2) и (6, 3) имеет одно дамэ и находится в атари. Черный камень (4, 5) также находится в атари. Помогите Али-Бабе, который всегда играет черными, определить, какие его группы находятся в атари.

Входные данные

Описание каждого теста начинается со строки, содержащей число N – размерность игровой доски (6 ≤ N ≤ 19). Далее следует N строк по N символов каждая. Каждый символ описывает один пункт доски. «B» означает черный камень, «W» – белый, «.» означает пустой пункт. Все группы на доске имеют хотя бы одно дамэ.

Выходные данные

Выводите одно число – количество групп черных камней, находящихся в атари.

Примеры
Входные данные
9
.........
.........
.........
...WW....
...BW.B..
B..W.W...
B...WBW..
....WBW..
W....BW..
Выходные данные
2
Входные данные
6
WB.WBB
.B.W.B
..WW.W
WWW..W
..W...
BBW...
Выходные данные
1

Город Нью-Йорк практически парализован гигантским количеством пробок. Мэр Джулио Джулиани предложил новую схему движения по городским улицам. Все улицы по этому плану должны стать односторонними.

Город расположен на прямоугольном острове размером M на N квадратных футов. (M футов с юга на север и N футов с запада на восток. Город разделен на кварталы улицами, идущими с запада на восток и авеню, идущими с юга на север. Длина каждого из кварталов составляет 200 футов (строго говоря, это расстояние между двумя параллельными улицами, окружающими квартал). Улицы нумеруются с юга на север начиная с единицы. Авеню нумеруются с запада на восток также с единицы.

Одностороннее движение организовано так, как показано на рисунке.

Мэр хочет проехать от одного перекрестка до другого. Определите минимальное расстояние между этими перекрестками. Для простоты можно игнорировать расстояние пройденное на перекрестках, т.е. расстояние пройденное вдоль квартала составляет ровно 200 футов.

Входные данные

Входной файл состоит из 4 строк

Первая строка содержит число M (400 ≤ M ≤ 1000000). Следующая строка содержит число N (400 ≤ N ≤ 1000000). Оба числа делятся на длину квартала. Следующие две строки описывают начальный и конечный перекресток. Каждое описание перекрестка задается так:

m Av., n St.

Например,

1st Av., 5th St.

Выходные данные

Выведите минимальное расстояние между перекрестками.

Примеры
Входные данные
800
600
1st Av., 1st St.
2nd Av., 3rd St.
Выходные данные
1000
ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
64 megabytes

В королевстве Флатландия наступили тяжелые времена. В пещерах неподалеку от столицы поселился ужасный Черный Дракон. Каждую ночь он выползал на охоту. Много людей погубил он, много построек уничтожил.

Король Флатландии понял, что дальше так продолжаться не может, и нанял отважного Рыцаря, чтобы тот победил рептилию.

Рыцарь принял предложение Короля и начал готовиться к битве. Сам он участия в битве принимать не желал (не рыцарское это дело –– мечом махать), поэтому решил собрать войско из копейщиков. Но копейщикам надо платить, а у Рыцаря из-за кризиса осталось совсем немного сбережений. Помогите ему определить минимальное число копейщиков, необходимое для победы над Черным Драконом.

У копейщика и у дракона есть два параметра: количество очков здоровья и наносимый противнику урон.

В ходе сражения дракон и отряд копейщиков обмениваются ударами. Первым наносит удар отряд копейщиков. При этом дракон получает урон, равный суммарной силе отряда копейщиков. Если дракон не погибает, то он наносит отряду копейщиков ответный удар. Если урон превосходит количество очков здоровья одного копейщика, то он погибает, а следующей копейщик в отряде получает оставшийся урон. Если от этого урона второй копейщик также погибает, то оставшийся урон переходит к третьему копейщику и так далее. Затем удар наносят оставшиеся в живых в отряде копейщики. Бой заканчивается, когда дракон погибает.

Требуется написать программу, которая определяет минимальное количество копейщиков, которое необходимо нанять Рыцарю, чтобы победить Черного Дракона.

Входные данные

Вводятся четыре натуральных числа через пробел: Hd, Dd, hp, dp –– количество очков здоровья дракона, урон, наносимый драконом, количество очков здоровья одного копейщика и урон, наносимый одним копейщиком. Все числа положительные и не превосходят 109.

Выходные данные

Выведите на экран одно целое число –– минимальное число копейщиков, необходимое для победы над драконом.

Примеры
Входные данные
500 50 10 10
Выходные данные
20
Входные данные
500 28 10 10
Выходные данные
15
ограничение по времени на тест
1.0 second;
ограничение по памяти на тест
64 megabytes

Известно, что на доске 8×8 можно расставить 8 ферзей так, чтобы они не били друг друга. Вам дана расстановка 8 ферзей на доске, определите, есть ли среди них пара бьющих друг друга.

Входные данные

Программа получает на вход восемь пар чисел, каждое число от 1 до 8 - координаты 8 ферзей.

Выходные данные

Если ферзи не бьют друг друга, выведите слово NO, иначе выведите YES.

Примеры
Входные данные
1 7
2 4
3 2
4 8
5 6
6 1
7 3
8 5
Выходные данные
NO
Входные данные
1 8
2 7
3 6
4 5
5 4
6 3
7 2
8 1
Выходные данные
YES
ограничение по времени на тест
1.0 second;
ограничение по памяти на тест
256 megabytes

Юная программистка Агнесса недавно узнала на уроке информатики об арифметических выражениях. Она заинтересовалась вопросом, что случится, если из арифметического выражения удалить всё, кроме скобок. Введя запрос в своём любимом поисковике, она выяснила, что математики называют последовательности скобок, которые могли бы встречаться в некотором арифметическом выражении, правильными скобочными последовательностями.

Так, последовательность ()(()) является правильной скобочной последовательностью, потому что она может, например, встречаться в выражении (2+2) : (3–(5–2)+4), а последовательности (() и ())( не являются таковыми. Легко видеть, что существует пять правильных скобочных последовательностей, состоящих ровно из шести скобок (по три скобки каждого типа — открывающих и закрывающих): ((())), (()()), (())(), ()(()) и ()()().

Агнесса заинтересовалась простейшими преобразованиями правильных скобочных последовательностей. Для начала Агнесса решила ограничиться добавлением скобок в последовательность. Она очень быстро выяснила, что после добавления одной скобки последовательность перестаёт быть правильной, а вот добавление двух скобок иногда сохраняет свойство правильности. Например, при добавлении двух скобок в различные места последовательности ()() можно получить последовательности (()()), (())(), ()(()) и ()()(). Легко видеть, что при любом способе добавления двух скобок с сохранением свойства правильности одна из новых скобок должна быть открывающей, а другая — закрывающей.

Агнесса хочет подсчитать количество различных способов добавления двух скобок в заданную правильную скобочную последовательность так, чтобы снова получилась правильная скобочная последовательность. К сожалению, выяснилось, что это количество может быть в некоторых случаях очень большим. Агнесса различает способы получения последовательности по позициям добавленных скобок в полученной последовательности. Например, даже при добавлении скобок в простейшую последовательность () можно получить другую правильную скобочную последовательность семью способами: ()(), (()), (()), (()), (()), ()(), ()(). Здесь добавленные скобки выделены жирным шрифтом.

Таким образом, если в полученной последовательности добавленная открывающая скобка стоит в позиции \(i\), а добавленная закрывающая — в позиции \(j\), то два способа, соответствующие парам \((i_1, j_1)\) и \((i_2, j_2)\), считаются различными, если \(i_1\neq i_2\) или \(j_1\neq j_2\).

Требуется написать программу, которая по заданной правильной скобочной последовательности определяет количество различных описанных выше способов добавления двух скобок.

Входные данные

Входной файл состоит из одной непустой строки, содержащей ровно \(2n\) символов: \(n\) открывающих и \(n\) закрывающих круглых скобок. Гарантируется, что эта строка является правильной скобочной последовательностью.

Выходные данные

Выведите в выходной файл количество различных способов добавления в заданную последовательность двух скобок таким образом, чтобы получилась другая правильная скобочная последовательность.

Подзадачи и система оценки

Данная задача содержит три подзадачи. Для оценки каждой подзадачи используется своя группа тестов. Баллы за подзадачу начисляются только в том случае, если все тесты из этой группы пройдены.

Подзадача 1 (40 баллов)

Величина \(n\) (количество скобок каждого типа) не превосходит 50.

Подзадача 2 (30 баллов)

Величина \(n\) (количество скобок каждого типа) не превосходит 2500.

Подзадача 3 (30 баллов)

Величина \(n\) (количество скобок каждого типа) не превосходит 50 000.

Примеры
Входные данные
()
Выходные данные
7
Входные данные
()()
Выходные данные
17
Входные данные
(())
Выходные данные
21

Страница: << 8 9 10 11 12 13 14 >> Отображать по:
Выбрано
:
Отменить
|
Добавить в контест