Линейные структуры(59 задач)
Корневая эвристика (sqrt декомпозиция)(14 задач)
Разреженные таблицы (sparse table)(2 задач)
Система непересекающихся множеств(16 задач)
Хеш(35 задач)
Персистентные структуры данных(2 задач)
В игре в пьяницу карточная колода раздается поровну двум игрокам. Далее они вскрывают по одной верхней карте, и тот, чья карта старше, забирает себе обе вскрытые карты, которые кладутся под низ его колоды. Тот, кто остается без карт – проигрывает.
Для простоты будем считать, что все карты различны по номиналу, а также, что самая младшая карта побеждает самую старшую карту ("шестерка берет туза").
Игрок, который забирает себе карты, сначала кладет под низ своей колоды карту первого игрока, затем карту второго игрока (то есть карта второго игрока оказывается внизу колоды).
Напишите программу, которая моделирует игру в пьяницу и определяет, кто выигрывает. В игре участвует 10 карт, имеющих значения от 0 до 9, большая карта побеждает меньшую, карта со значением 0 побеждает карту 9.
Программа получает на вход две строки: первая строка содержит 5 чисел, разделенных пробелами — номера карт первого игрока, вторая – аналогично 5 карт второго игрока. Карты перечислены сверху вниз, то есть каждая строка начинается с той карты, которая будет открыта первой.
Программа должна определить, кто выигрывает при данной раздаче, и вывести слово first
или second
, после чего вывести количество ходов, сделанных до выигрыша. Если на протяжении 106 ходов игра не заканчивается, программа должна вывести слово botva
.
1 3 5 7 9 2 4 6 8 0
second 5
Рассмотрим последовательность, состоящую из круглых, квадратных и фигурных скобок. Программа дожна определить, является ли данная скобочная последовательность правильной.
Пустая последовательность явлется правильной. Если A
– правильная, то последовательности (A)
, [A]
, {A}
– правильные. Если A
и B
– правильные последовательности, то последовательность AB
– правильная.
В единственной строке записана скобочная последовательность, содержащая не более 100000 скобок.
Если данная последовательность правильная, то программа должна вывести строку yes
, иначе строку no
.
()[]
yes
В постфиксной записи (или обратной польской записи) операция записывается после двух операндов. Например, сумма двух чисел A
и B
записывается как A B +
. Запись B C + D *
обозначает привычное нам (B + C) * D
, а запись A B C + D * +
означает A + (B + C) * D
. Достоинство постфиксной записи в том, что она не требует скобок и дополнительных соглашений о приоритете операторов для своего чтения.
В единственной строке записано выражение в постфиксной записи, содержащее цифры и операции +
, -
, *
. Цифры и операции разделяются пробелами. В конце строки может быть произвольное количество пробелов.
Необходимо вывести значение записанного выражения.
8 9 + 1 7 - *
-102
На складе хранятся контейнеры с товарами N различных видов. Все контейнеры составлены в N стопок. В каждой стопке могут находиться контейнеры с товарами любых видов (стопка может быть изначально пустой).
Автопогрузчик может взять верхний контейнер из любой стопки и поставить его сверху в любую стопку. Необходимо расставить все контейнеры с товаром первого вида в первую стопку, второго вида – во вторую стопку и т.д.
Программа должна вывести последовательность действий автопогрузчика или сообщение о том, что задача решения не имеет.
Формат входных данных
В первой строке входных данных записано одно натуральное число N, не превосходящее 500. В следующих N строках описаны стопки контейнеров: сначала записано число ki – количество контейнеров в стопке, а затем ki чисел – виды товара в контейнерах в данной стопке, снизу вверх. В каждой стопке вначале не более 500 контейнеров (в процессе переноса контейнеров это ограничение может быть нарушено).
Формат выходных данных
Программа должна вывести описание действий автопогрузчика: для каждого действия напечатать два числа – из какой стопки брать контейнер и в какую стопку класть. (Обратите внимание, что минимизировать количество операций автопогрузчика не требуется.) Если задача не имеет решения, необходимо вывести одно число 0. Если контейнеры изначально правильно размещены по стопкам, то выводить ничего не нужно.
Пример
Входные данные |
Выходные данные |
3 4 1 2 3 2 0 0 |
1 2 1 3 1 2 |
Реализуйте структуру данных "стек". Напишите программу, содержащую описание стека и моделирующую работу стека, реализовав все указанные здесь методы. Программа считывает последовательность команд и в зависимости от команды выполняет ту или иную операцию. После выполнения каждой команды программа должна вывести одну строчку. Возможные команды для программы:
ok
. ok
. bye
и завершить работу. Команды управления стеком вводятся в описанном ранее формате по 1 на строке.
Гарантируется, что набор входных команд удовлетворяет следующим требованиям: максимальное количество элементов в стеке в любой момент не превосходит 100, все команды pop
и back
корректны, то есть при их исполнении в стеке содержится хотя бы один элемент.
Требуется вывести протокол работы со стеком, по 1 сообщению в строке
push 3 push 14 size clear push 1 back push 2 back pop size pop size exit
ok ok 2 ok ok 1 ok 2 2 1 1 0 bye