ЗАДАЧИ
problems.ru
О проекте | Об авторах | Справочник
Каталог по темам | по источникам |
К задаче N

Проект МЦНМО
при участии
школы 57
Фильтр
Сложность с по   Класс с по  
Выбрано 3 задачи
Версия для печати
Убрать все задачи

Имя входного файла:

necklace.in

Имя выходного файла:

necklace.out

Максимальное время работы на одном тесте:

1 секунда

Максимальный объем используемой памяти:

64 мегабайта

Максимальная оценка за задачу:

100 баллов

   

В витрине ювелирного магазина стоит манекен, на шею которого надето ожерелье. Оно состоит из N колечек, нанизанных на замкнутую нить. Все колечки имеют разные размеры. В зависимости от размера колечки пронумерованы числами от 1 до N, начиная с самого маленького и до самого большого. Колечки можно передвигать вдоль нити и протаскивать одно через другое, но только в том случае, если номера этих колечек отличаются более чем на единицу.

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

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

Формат входных данных

В первой строке входного файла записано число N (2 ≤ N ≤ 50).

Во второй строке через пробел следуют N различных чисел от 1 до N - номера колечек, расположенных вдоль нити по часовой стрелке.

Формат выходных данных

Выходной файл должен содержать описание процесса упорядочения.

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

Количество строк выходного файла не должно превышать 50000.

Если требуемого упорядочения колечек достичь не удается, в выходной файл нужно вывести одно число √1.

Пример

necklace.in

necklace.out

4

3 2 4 1

1 3

2 4

1 4

0

Вниз   Решение


Имя входного файла:

memory.in

Имя выходного файла:

memory.out

Максимальное время работы на одном тесте:

2 секунды

Максимальный объем используемой памяти:

64 мегабайта

Максимальная оценка за задачу:

100 баллов

   

Пете поручили написать менеджер памяти для новой стандартной библиотеки языка H++. В распоряжении у менеджера находится массив из N последовательных ячеек памяти, пронумерованных от 1 до N. Задача менеджера - обрабатывать запросы приложений на выделение и освобождение памяти.

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

Запрос на освобождение памяти имеет один параметр T. Такой запрос означает, что менеджер должен освободить память, выделенную ранее при обработке запроса с порядковым номером T. Запросы нумеруются, начиная с единицы. Гарантируется, что запрос с номером T - запрос на выделение, причем к нему еще не применялось освобождение памяти. Освобожденные ячейки могут снова быть использованы для выделения памяти. Если запрос с номером T был отклонен, то текущий запрос на освобождение памяти игнорируется.

Требуется написать менеджер памяти, удовлетворяющий приведенным критериям.

Формат входных данных

Первая строка входного файла содержит числа N и M - количество ячеек памяти и количество запросов соответственно (1 ≤ N ≤ 231 - 1; 1 ≤ M ≤ 105). Каждая из следующих M строк содержит по одному числу: (i+1)-я строка входного файла (1 ≤ iM) содержит либо положительное число K, если i-й запрос - запрос на выделение с параметром K (1 ≤ KN), либо отрицательное число -T, если i-й запрос - запрос на освобождение с параметром T (1 ≤ T < i).

Формат выходных данных

Для каждого запроса на выделение памяти выведите в выходной файл результат обработки этого запроса: для успешных запросов выведите номер первой ячейки памяти в выделенном блоке, для отклоненных запросов выведите число -1. Результаты нужно выводить в порядке следования запросов во входном файле.

Пример

memory.in

memory.out

6 8

2

3

-1

3

3

-5

2

2

1

3

-1

-1

1

-1

ВверхВниз   Решение


Какое самое большое число ладей можно поставить на шахматную доску 8 на 8 так, чтобы они не били друг друга?

Вверх   Решение

Задачи

Страница: 1 2 3 4 5 6 7 >> [Всего задач: 58]      



Задача 32830

Тема:   [ Задачи на проценты и отношения ]
Сложность: 2
Классы: 7,8

В течение года цены на штрюдели два раза поднимали на 50%, а перед Новым Годом их стали продавать за полцены.
Сколько стоит сейчас один штрюдель, если в начале года он стоил 80 рублей?

Прислать комментарий     Решение

Задача 32838

Тема:   [ Задачи на движение ]
Сложность: 2
Классы: 7,8

Вадим и Лёша спускались с горы. Вадим шёл пешком, а Лёша съезжал на лыжах в семь раз быстрее Вадима. На полпути Лёша упал, сломал лыжи и ногу и пошёл в два раза медленней Вадима. Кто первым спустится с горы?

Прислать комментарий     Решение

Задача 32784

Тема:   [ Принцип Дирихле (прочее) ]
Сложность: 2
Классы: 7,8

Какое самое большое число ладей можно поставить на шахматную доску 8 на 8 так, чтобы они не били друг друга?
Прислать комментарий     Решение


Задача 32796

Темы:   [ Арифметика. Устный счет и т.п. ]
[ Арифметическая прогрессия ]
Сложность: 2
Классы: 7,8

Когда мальчик Клайв подошел к дедушкиным настенным часам с кукушкой, на них было 12 часов 5 минут. Клайв стал крутить пальцем минутную стрелку, пока часовая не вернулась на прежнее место. Сколько "ку-ку" насчитал за это время дедушка в соседней комнате?
Прислать комментарий     Решение


Задача 104039

Тема:   [ Задачи-шутки ]
Сложность: 2
Классы: 7,8,9

Назовем натуральное число "изумительным", если оно имеет вид ab + ba (где a и b - натуральные числа). Например, число 57 - изумительное, так как 57 = 25 + 52. Является ли изумительным число 2006?
Прислать комментарий     Решение


Страница: 1 2 3 4 5 6 7 >> [Всего задач: 58]      



© 2004-... МЦНМО (о копирайте)
Пишите нам

Проект осуществляется при поддержке Департамента образования г.Москвы и ФЦП "Кадры" .