Плюсануть
Поделиться
Класснуть
Запинить


Олимпиадный тренинг

Вы можете самостоятельно решать эти задачи столько раз, сколько вам это понадобится.
   

Часы

Разбор случаев Условный оператор Задачи на моделирование

Наручные часы на электронных чернилах могут показывать текущее время в нескольких разных формах. Одна из форм - это имитация механических часов со стрелками. Циферблат часов разделен на 12 больших часовых делений, а каждое из них - на 5 малых делений. Угол между малыми делениями на циферблате равен 6. Для экономии энергии перерисовка изображения происходит один раз в минуту, когда необходимо переместить минутную стрелку. Часовая стрелка также движется дискретно, перемещаясь через каждые 12 минут на одно малое деление. Таким образом в 12:35 часовая стрелка будет указывать на 2-е малое деление справа от 12 часов, а минутная будет указывать на 7 часов. Угол между стрелками в этот момент равен 162º. В 12:36 часовая стрелка переместится на 3-е малое деление после 12 часов, а минутная — на следующее малое деление после 7 часов. Угол между стрелками часов при этом не изменится.

Напишите программу, которая вычисляет величину "внутреннего" (меньшего) угла между часовой и минутной стрелкой в заданный момент времени.
Первая строка ввода содержит два целых числа, разделенных одним пробелом — время на часах, часы H и минуты M (\(1 <= H <= 12, 0 <= M <= 59\)).
Вывести одно целое число в диапазоне от 0 до 180 — величину угла между стрелками в градусах.
 
Примеры
Входные данные Выходные данные
1 12 35 162

Год Коровы

Цикл while Задачи на моделирование

Известно, что в Китайском календаре года следуют 12-летнему циклу: Ox(Бык), Tiger(Тигр), Rabbit(Кролик), Dragon(Дракон), Snake(Змея), Horse(Лошадь), Goat(Коза), Monkey(Обезьяна), Rooster(Петух), Dog(Собака), Pig(Свинья), Rat(Крыса), и затем Ox опять. 
Уже много лет корова Беси гордится, что она родилась в год Быка. Её подружка Эльза хочет узнать сколько лет отделяет её рождение от рождения Беси и надеется, что вы поможете ей узнать это, основываясь на отношениях между датами рождения некоторых коров на ферме.



Входные данные
Первая строка ввода содержит целое число N (\(1<=N<=100\)). Каждая из следующих N строк содержит 8-словную фразу указывающую отношение между датами рождения двух коров. В следующей форме

"Mildred born in previous Dragon year from Bessie",

или

"Mildred born in next Dragon year from Bessie" (previous - предыдуший, next-следующий).

Последнее слово - имя коровы, которое или Bessie или корова ранее упомянутая в предыдущей строке ввода.
Первое слово - имя коровы, которая не Bessie и ещё не упоминалась на вводе. Все имена коров имеют не более 10 символов a..z или A..Z.

5-ое слово - один из знаков зодиака, указаных ранее.

4-ое слово либо "previous" либо "next". Например, фраза "Mildred born in previous Dragon year from Bessie", означает, что год рождения Mildred был год Дракона(Dragon), ближайший и строго раньше (не равен) года рождения Беси.



Выходные данные
Выведите количество лет, на которое отличаются дни рождения Беси и Эльзы. Гарантируется, что это число может быть определено из введённых данных.
 
 
Примеры
Входные данные Выходные данные Примечание
1 4
Mildred born in previous Dragon year from Bessie
Gretta born in previous Monkey year from Mildred
Elsie born in next Ox year from Gretta
Paulina born in next Dog year from Bessie
12

В примере выше

  • Elsie родилась на 12 лет раньше Bessie.
  • Mildred родилась на 9 лет раньше Bessie.
  • Gretta родилась на 17 лет раньше Bessie.
  • Paulina родилась на 9 лет раньше Bessie.

Кассы

Задачи на моделирование Дата и время

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

Входные данные
Сначала вводится одно целое число N (0 < N ≤ 1000).

В каждой из следующих N строк через пробел расположены 4 целых числа, первые два из которых обозначают время открытия кассы в часах и минутах (часы — целое число от 0 до 23, минуты — целое число от 0 до 59), оставшиеся два — время закрытия в том же формате. Числа разделены пробелами.

Время открытия означает, что в соответствующую ему минуту касса уже работает, а время закрытия — что в соответствующую минуту касса уже не работает. Например, касса, открытая с 10 ч. 30 мин. до 18 ч. 30 мин., ежесуточно работает 480 минут.

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

Выходные данные
Требуется вывести одно число — суммарное время за сутки (в минутах), на протяжении которого работают все N касс.

Примеры
Входные данные Выходные данные Пояснения
1 3
1 0 23 0
12 0 12 0
22 0 2 0
120 Первая касса работает с часу до 23 часов, вторая – круглосуточно, третья – с 22 часов до 2 часов ночи следующего дня. Таким образом, все три кассы одновременно работают с 22 до 23 часов и с часу до двух часов, то есть 120 минут.
2 2
9 30 14 0
14 15 21 0
0 Первая касса работает до 14 часов, а вторая начинает работать в 14 часов 15 минут, то есть одновременно кассы не работают.
3 2
14 00 18 00
10 00 14 01
1 Вместе кассы работают лишь одну минуту – с 14:00 до 14:01 (в 14:01 вторая касса уже не работает).

Конец K-ого урока

Целые числа Задачи на моделирование

В школе продолжительность каждого урока 45 минут, а перемены между уроками – всего 5 минут. Первый урок начинается ровно в 8 часов утра. Напишите программу, отвечающую на вопрос «во сколько в этой школе заканчивается K-ый урок?»

Формат входных данных
Вводится одно натуральное число K, не превышающее 15.

Формат выходных данных
Выведите время окончания K-ого урока: сначала часы, потом минуты, разделяя их пробелом.

Расстановка ноутбуков

Задачи на моделирование Условный оператор

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

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

Выходные данные
Выведите два числа — размеры стола. Если возможно несколько ответов, выведите любой из них (но только один).

Примечание
В примерах указаны всевозможные ответы на поставленную задачу. Ваша программа должна вывести один из них.

Примеры
Входные данные Выходные данные
1 10 2 2 10 20 2
2 20
4 10
10 4
2 5 7 3 2 9 5
5 9

Карточки

Задачи на моделирование

Вася изготовил карточки, написав на них N первых заглавных букв латинского алфавита. Карточки Вася положил в стопку.

Дальше он берет первую сверху карточку и кладет ее в новую стопку. Далее вторую карточку он кладет вниз этой новой стопки, третью — наверх новой стопки, потом четвертую — опять вниз, следующую — наверх и т.д.

После этого оказалось, что карточки лежат строго по алфавиту, если просматривать их сверху вниз.

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

Входные данные
Вводится натуральное число N (N не превышает 26).

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

Примеры
Входные данные Выходные данные
1 3 BCA
2 6 CDBEAF

Ёлочка

Символы Задачи на моделирование

«Нарисуйте» с помощью символов на экране лес. При этом не пользуйтесь командами перемещения курсора по экрану. Ваша программа должна последовательно выводить символы строк (или строки целиком).

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

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

Елочки должны изображаться символами «#» (решеточка), а пустые места между ними — символами «.» (точка). Во всех строках должно быть выведено одинаковое количество символов, при этом обязательно должна быть строка, в которой последним символом является решеточка, в последней строке обязательно должны быть решеточки (т.е. должен быть выведен прямоугольник из точек и решеточек, в нем не должно быть лишних столбцов и строк).

Входные данные
Вводится число елочек N, а дальше N пар натуральных чисел, описывающих елочки: первое число каждой пары задает количество треугольников в елочке, а второе — размер самого маленького треугольника. Елочки описываются в порядке слева направо (если смотреть на вершины елочек).

Гарантируется, что входные данные будут таковы, что количество символов, которое нужно будет вывести в одной строке, не превысит 79.

Выходные данные
Выведите требуемый «рисунок». Для лучшего понимания смотрите примеры.
 

Примеры
Входные данные Выходные данные
1 2
3 2
3 3
...#......#....
..###....###...
...#....#####..
..###.....#....
.#####...###...
...#....#####..
..###..#######.
.#####....#....
#######..###...
........#####..
.......#######.
......#########
2 3
1 1
2 1
3 2
#.#...#...
..#..###..
.###..#...
.....###..
....#####.
......#...
.....###..
....#####.
...#######

Рассадка участников

Алгоритмы сортировки Задачи на моделирование

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

Входные данные
Программа получает на вход целое положительное число участников олимпиады N1000. Далее в N строках записаны номера школ, в которых учатся участники олимпиады. Номера школ — целые числа от 1 до 3000.

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

Если задача не имеет решения, необходимо вывести одно число 0.

Числа можно выводить как в отдельных строках, так и в одной строке через пробел. Если есть несколько вариантов рассадки, то необходимо вывести любой из них (но только один).

Примеры
Входные данные Выходные данные
1 4
1005
1005
5
2005
1005 5 1005 2005 
2 4
1005
1005
2005
1005
0

Оцените пассажиропоток

Задачи на моделирование

Маршрут автобуса проходит через N остановок (включая конечные). Отдел по исследованию пассажиропотоков записал данные о том, сколько человек выходило и сколько садилось в автобус на каждой остановке. Напишите программу, которая по этим данным определит, какое максимальное количество человек одновременно в этот рейс ехало в автобусе.

Входные данные
Во входных данных записано сначала число N (2≤N≤100) – количество остановок на маршруте. Далее задается количество человек, севших в автобус на конечной. Далее идет (N-2) пары чисел, задающих для промежуточных остановок количество вышедших и количество вошедших пассажиров. Наконец, идет число, задающее количество вышедших из автобуса на конечной остановке.

Количество вошедших пассажиров на каждой остановке не превышало 100. Данные корректны, в частности, суммарное количество вошедших в автобус на всех остановках пассажиров всегда равно суммарному количеству вышедших.

Выходные данные
Выведите одно целое число — максимальное количество человек, которые в какой-то момент одновременно ехали в автобусе.
 

Примеры
Входные данные Выходные данные Пояснение
1 5
10
3 1
5 10
0 2
15
15 На конечной в автобус село 10 человек. Далее 3 вышло и 1 зашел. В автобусе стало 8 человек. На следующей остановке вышло 5 и зашло 10. Стало 13 человек. На последней промежуточной остановке никто не вышел, а зашло 2 человека. На конечной вышло 15 человек. Итого максимальное количество – 15.
2 5
10
10 0
0 0
0 10
10
10 На конечной село 10 человек, которые на следующей остановке вышли. После этого на следующей остановке никто не сел и никто не вышел. Дальше опять село 10 человек, которые доехали до конечной.
3 5

0 9
3 4
2 0
8
10 С конечной автобус отправился без пассажиров. Дальше в него село 9 человек. На следующей остановке 3 вышли и зашли 4. В автобусе стало 10 человек. На следующей остановке 2 вышли и никто не зашел. 8 человек доехало до конечной. Максимальное количество пассажиров составляло 10
4 3
100
0 100
200
200 На начальной и на промежуточной остановку в автобус село по 100 человек. Вышло из автобуса 200 человек.

Черно-белые палиндромы

Задачи на моделирование

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

Вам дана полоса длины N. Требуется разрезать ее на полоски, являющиеся палиндромами, так, чтобы количество получившихся полосок было строго меньше величины (2/5)N + 3.

Входные данные
Первая строка входного файла содержит число N — длину исходной полосы (N — натуральное число, не превышающее 100000). Далее идет N чисел, описывающих раскраску полосы: 0 означает черную клетку, а 1 — белую.

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

Примеры
Входные данные Выходные данные Пояснение
1 6
0 1 0 1 1 0
3 5 Из исходной полосы мы получим 3 полосы-палиндрома, сделав разрезы после 3-й клетки (то есть между 3-й и 4-й) и после 5-й (то есть между 5-й и 6-й)
2 6
0 1 1 0 0 0
1 3 Данную полосу можно разрезать на 2 полосы-палиндрома, однако по условию не требуется искать решение с минимальным числом получившихся полосок — достаточно, чтобы число полосок удовлетворяло указанному в условии ограничению.
3 5
0 0 0 0 0
  Исходная строка уже является палиндромом, поэтому можно ничего не разрезать

Луч света в темном царстве

Задачи на моделирование Двумерные массивы

Темное царство представляет собой лабиринт NxM, некоторые клетки которого окружены зеркальными стенами, а остальные — пустые. Весь лабиринт также окружен зеркальной стеной. В одной из пустых клеток лабиринта поставили светофор, который испускает лучи в 4 направлениях: под 45 градусов относительно стен лабиринта. Требуется изобразить траекторию этих лучей.

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


Входные данные
В первой строке входного файла записаны два натуральных числа N и M — число строк и столбцов в лабиринте (каждое из чисел не меньше 1 и не больше 100). В следующих N строках записано ровно по M символов в каждой — карта лабиринта. Символ * (звездочка) обозначает клетку, окруженную зеркальными стенками, . (точка) — пустую клетку, символ X (заглавная латинская буква X) — клетку, в которой расположен светофор (такая клетка ровно одна).

Выходные данные
В выходной файл выведите N строк по M символов в каждой — изображение лабиринта с траекториями лучей. Здесь, как и раньше, * (звездочка) должна обозначать клетки, окруженные зеркальными стенами, . (точка) — пустые клетки, через которые лучи света не проходят, / (слеш) — клетки, через которые луч света проходит из левого нижнего угла в правый верхний (или обратно — из правого верхнего в левый нижний), \ (обратный слеш) — клетки, через которые луч проходит из левого верхнего угла в правый нижний (или обратно), а символ X (заглавная латинская буква X) — клетки, через которые лучи проходят по обеим диагоналям.

Примеры
Входные данные Выходные данные
1
3 5
X....
.....
.....
XXXXX
XXXXX
XXXXX
2
3 3
...
..X
...
/X\
X.X
\X/

Коллайдер

Двоичное дерево поиска Задачи на моделирование

Физики проводят эксперимент для исследования частиц трёх типов: x, y и z. Они запускают в коллайдер пронумерованный ряд из n частиц. Во время эксперимента происходит воздействие на одну конкретную частицу, после чего частица исчезает с i-ого места ряда и моментально появляется на месте j. После её исчезновения номера частиц, стоящих правее, уменьшаются на 1, а после появления, номера частиц, стоящих правее, увеличиваются на 1. После определенного числа воздействий физики интересуются какая частица стоит на месте k. Напишите программу, которая поможет физикам.

Входные данные
В первой строке файла два целых числа: n – количество частиц и m — общее количество воздействий и вопросов (1 ≤ n ≤ 1000000, 1 ≤ m ≤ 15000). Во второй строке — последовательность из символов x, y и z длиной n. На каждой из следующих m строк (1 ≤ m ≤ 15000) описано воздействие или вопрос. Строка, в которой описано воздействие, начинается символом a и после пробела дается два целых числа из интервала [1; n]. Первое из них показывает начальное, а второе  - конечное местоположение частицы во время воздействия. Строка, в которой описан вопрос, начинается символом q и после пробела дается одно целое число из интервала [1; n]. Оно указывает позицию, которая интересует физиков.

Выходные данные
Выведите столько строк, сколько вопросов во входном файле. В строке номер i надо записать ответ на вопрос i — название соответствующей частицы x, y или z.

Пояснения к примеру
Последовательность после первого воздействия – xxyyzxxzxzyyzyx, последовательность после второго воздействия – xxyxyzxxzxzyyzy, последовательность после третьего воздействия – xyxyxyzxxzxzyzy,
 

Примеры
Входные данные Выходные данные
1 15 6
xzxyyzxxzxyyzyx
a 2 10
a 15 4
q 3
a 12 2
q 14
q 2
y
z
y

Роботы

Обход в ширину Задачи на моделирование

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

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

Напишите программу, вычисляющую, через какое минимальное время все роботы смогут собраться вместе (в зале или в туннеле).

Входные данные
Сначала на вход программы поступают числа N — количество залов (1≤N≤400) и K — количество туннелей (1≤K≤20000). Далее вводится K пар чисел, каждая пара описывает номера залов, соединяемых туннелем (по туннелю можно перемещаться в обе стороны). Между двумя залами может быть несколько туннелей. Туннель может соединять зал с самим собой. Далее следует число M (1≤M≤400) — количество роботов. Затем вводятся M чисел, задающих номера залов, где вначале расположены роботы. В одном зале может быть несколько роботов.

Выходные данные
Выведите минимальное время в минутах, через которое роботы могут собраться вместе. Если роботы никогда не смогут собраться вместе, выведите одно число –1 (минус один).

Примеры
Входные данные Выходные данные
1 4 5
1 2
2 3
3 4
1 4
1 3
3
1 2 4
1
2 3 2
1 2
2 3
2
1 3
1

"Сортировка" с конфеткой

Сортировка "пузырьком" Задачи на моделирование

Дан массив из N различных натуральных чисел от 1 до N. Сортировка массива по возрастанию "пузырьком" работает следующим образом. Сначала сравниваются первый и второй элемент, и, если первый больше второго, то они меняются местами. Затем та же процедура производится со вторым и третьим элементом, …, с предпоследним и последним. Затем эта процедура снова повторяется с первым и вторым, со вторым и третьим, …, с предпоследним и последним элементами. И так (N – 1) раз.

Сортировка «с конфеткой» выполняется по тем же правилам, но дополнительно задан список пар чисел, которые не меняются друг с другом ни при каких условиях (в таком случае сортирующий получает конфетку за то, что пропускает соответствующий обмен). Например, наличие в списке пары (4,1) обозначает, что если в какой-то момент рядом окажутся числа 4 и 1 или 1 и 4, и по алгоритму сортировки их нужно будет поменять местами, то обмена не произойдет, а сортирующий получит конфетку.

Требуется провести сортировку «с конфеткой» данного массива и выдать результат сортировки.

Входные данные
Сначала вводится число N — количество чисел в массиве, затем N чисел — элементы массива. Далее задается число M — количество пар чисел, за которые дают конфетку, а затем M пар чисел. Если в списке есть пара (i,j), то и за пару (j,i) также дают конфетку.

1 ≤ N ≤ 5000, 0 ≤ M ≤ 10000.

Выходные данные
Требуется вывести массив после сортировки.

Примеры
Входные данные Выходные данные
1 4
1 4 2 3
2
4 3
1 2
1 2 4 3

Игра в пьяницу

Очередь Задачи на моделирование

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

Для простоты будем считать, что все карты различны по номиналу, а также, что самая младшая карта побеждает самую старшую карту ("шестерка берет туза").

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

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

Входные данные
Программа получает на вход две строки: первая строка содержит 5 чисел, разделенных пробелами — номера карт первого игрока, вторая – аналогично 5 карт второго игрока. Карты перечислены сверху вниз, то есть каждая строка начинается с той карты, которая будет открыта первой.

Выходные данные
Программа должна определить, кто выигрывает при данной раздаче, и вывести слово first или second, после чего вывести количество ходов, сделанных до выигрыша. Если на протяжении 106 ходов игра не заканчивается, программа должна вывести слово botva.

Примеры
Входные данные Выходные данные
1 1 3 5 7 9
2 4 6 8 0
second 5

Переключение между окнами

Список Задачи на моделирование

Когда пользователь работает в операционной системе Windows, у него часто запущено несколько приложений. Каждое из приложений работает в отдельном окне. Для переключения между окнами используется комбинация клавиш «Alt+Tab». Эта комбинация делает активным окно, в котором пользователь работал перед тем, как перейти в текущее активное окно.

Чтобы переключиться в другое окно, можно нажать клавишу «Alt» и затем, не отпуская ее, несколько раз нажать клавишу «Tab». Чтобы понять, какое окно станет активным после этого, воспользуемся следующей моделью. Пусть запущено n приложений. Приложения в операционной системе организованы в виде списка и упорядочены по убыванию времени последней активности. То есть приложение, окно которого является активным в настоящий момент – первое в списке, приложение, окно которого было активно перед этим – второе, и т. д.

Если нажать клавишу «Alt» и затем, не отпуская ее, нажать клавишу «Tab» k раз, то активным станет окно приложения, которое находится на (k mod n) + 1-м месте в списке. Здесь a mod b означает остаток от деления a на b. Иными словами, операционная система рассматривает список как циклический, переходя после последнего элемента списка к первому.

При запуске нового приложения оно добавляется в начало списка.

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

Входные данные
В первой строке вводится целое число n – количество действий пользователя ( 1 ≤ n ≤ 1000). Следующие n строк содержат описание действий пользователя.

Запуск приложения описывается строкой «Run <имя приложения»>. Здесь «<имя приложения»> – строка из не более чем 100 латинских букв, цифр и пробелов. Она отделена от слова «Run» ровно одним пробелом. Все имена приложений различны. Большие и маленькие буквы считаются различными.

Переключение между приложениями описывается строкой «Alt+Tab+...+Tab», здесь подстрока «+Tab» повторена в точности столько раз, сколько раз пользователь нажал клавишу «Tab», не отпуская клавишу «Alt». Это количество не превышает 100.

Первая команда во входных данных – всегда команда «Run».

Выходные данные
Выведите  n строк – последовательность имен приложений, с которыми работал пользователь в порядке, в котором их окна становились активными.
 

Примеры
Входные данные Выходные данные
1 6
Run Mozilla Firefox
Run Free Pascal
Alt+Tab
Run Miranda IM
Alt+Tab+Tab
Alt+Tab+Tab+Tab
Mozilla Firefox
Free Pascal
Mozilla Firefox
Miranda IM
Free Pascal
Free Pascal

Спираль

Двумерные массивы Задачи на моделирование

Робот перемещается по клетчатой плоскости и рисует спираль. Исходно он находится в клетке (0, 0) и направлен в сторону увеличения первой координаты.
Далее он действует по следующему алгоритму: совершает d перемещений вперед, затем поворачивает налево и снова делает d перемещений вперед. После этого он поворачивает налево и умножает значение d на k. Затем робот повторяет описанный процесс. Робот останавливается, сделав суммарно ровно n перемещений.
Требуется вывести картинку, на которой отмечены клетки, на которых побывал робот.

Входные данные
На вход подаются целые числа n, d и k (1 ≤ n ≤ 1000, 1 ≤ d ≤ 100, 2 ≤ k ≤ 5).

Выходные данные
Пусть минимальный прямоугольник из клеток, содержащий все посещенные роботом клетки, имеет высоту h и ширину w. На первой строке выведите числа h и w, разделенные пробелом. Следующие h строк должны содержать по w символов, выведите «*» для клетки, посещенной роботом и «.» для не посещенной.

Примеры
Входные данные Выходные данные
1 13 2 2
5 5
*****
*...*
*.***
*....
**...

Отслеживание контактов

Задача на реализацию Задачи на моделирование Перебор

Фермер Джон продолжает заботиться о здоровье своих коров, последовательно пронумерованных 1…N.
Недавно ФД проверил их всех и выяснил, что некоторые из них больны. Используя видео из амбара, ФД может узнать какие пары коров взаимодействовали распространяя при этом болезнь. ФД собрал список с указанием времени, в которое происходило взаимодействие пар коров в видео (t,x,y), означающем, что в момент времени t корова x взаимодействовала с коровой y. Также ФД знает следующее:

  1. Ровно одна корова была инфицирована изначально (нулевой пациент).
  2. После того, кaк корова инфицирована, она передаёт инфекцию её следующим K взаимодействиям (возможно включая одного и того же партнера несколько раз). После K раз передачи инфекций, она перестаёт передавать инфекцию (осознав что заражает, она начинает тщательно мыть копыта).
  3. Однажды заболев, она остаётся больной.

К несчастью, ФД не знает, какая из его N коров, является "нулевым пациентом", кроме того он не знает значение K!. Помогите ему сузить диапазоны этих неизвестных, основываясь на его данных. Гарантируется, что ответ существует.

Входные данные
Первая строка ввода содержит N (2<= N <=100) и T (1 <= T <= 250). Следующая строка содержит строку длиной N, состоящую из 0 и 1, описывающую текущее состояние N коров ФД, 0 - здорова, 1 - больна. Каждая из последующих T строк описывает запись из списка взаимодействий ФД, и состоит из трёх чисел, t,x,y, где t - положительное целое время взаимодействия (t <= 250), x и y - различные целые в интервале 1…N, указывающее какие коровы взаимодействовали в момент времени T. В один момент времени T происходит не более одного взаимодействия.

Выходные данные
Выведите одну строку, содержащую три целых числа x,y,z, где x - количество различных коров, которые могли быть "нулевым пациентом", y - минимально возможное значение K, подходящее к исходным данным, z - наибольшее возможное значение K, подходящее к исходным данным. Если для K нет верхней границы, выведите "Infinity" для z. Заметим, что возможно K=0.
 
Примеры
Входные данные Выходные данные
1 4 3
1100
7 1 2
5 2 3
6 2 4
1 1 Infinity

Три четыре пять корову поменять

Вывод формулы Задача на реализацию Задачи на моделирование

N  коров (1 ≤ N ≤ 100) Фермера Джона выстроены в ряд. i-ая корова слева имеет метку i, для всех 1≤i≤N.
ФД приказал коровам повторить ровно K (1 ≤ K ≤109) раз следующий двухшаговый процесс:

Последовательность коров в позициях A1…A2 слева реверсивно меняют свой порядок (1≤A1<A2≤N).
Затем последовательность коров в позициях B1…B2 слева реверсивно меняют свой порядок (1≤B1<B2≤N).
Выведите получившийся порядок коров для всех i 1 ≤ i ≤ N после выполнения этого процесса ровно K раз.


Входные данные
Первая строка содержит N и K. Вторая строка содержит A1 и A2, третья строка содержит B1 и B2.
Выходные данные
На i-ой строке выведите метку i-ой коровы слева после завершения процесса всех обменов.

Примеры
Входные данные Выходные данные Пояснение
1
7 2
2 5
3 7
1
2
4
3
5
7
6
Изначально порядок коров слева направо такой     [1,2,3,4,5,6,7] 
После первого шага процесса порядок станет таким [1,5,4,3,2,6,7]
После второго шага процесса порядок станет таким [1,5,7,6,2,3,4]. 
Повторив оба шага ещё раз получим результат, приведенный в выводе.

Trapped in the Haybales

Задачи на моделирование

Фермер Джон получил груз из N больших стогов сена (1≤N≤4000) и разместил эти стога в различных точках дороги, ведущей к его амбару. К несчастью, он совсем забыл, что Беси пасётся вдоль этой дороги и может оказаться в ловушке из этих стогов.
Каждый стог с номером j имеет размер Sj и уникальную позицию Pj, задающую его положение вдоль одномерной дороги. Беси начинает движение в некоторой позиции, где не было стога и может передвигаться свободно вдоль дороги, вплоть до позиции, где размещён стог сена, но она не может перейти эту позицию. В качестве исключения, если она движется в некотором направлении D единиц расстояния, она набирает достаточно скорости, чтобы протаранить любой стог сена с высотой строго меньше, чем D. Конечно, после того, как она сделает это, перед ней открывается пространство с другими стогами сена, которые она тоже может протаранить.
 
Беси может выйти на свободу как после самого левого, так и после самого правого стога сена. Пожалуйста, определите общую длину дороги, состоящую из тех позиций, из которых Беси не сможет выбраться. Например, если Беси не может выбраться если она начинает с позиции между стогами в позициях 1 и 5, тогда ответ будет 4 (поскольку эти позиции ограничивают область размером 4).
 
ФОРМАТ ВВОДА:
Первая строка ввода содержит NN. Каждая из последующих NN строк описывает стог и содержит два целых числа, определяющих его размер и позицию, каждое в диапазоне 1…109.

ФОРМАТ ВЫВОДА:
Выведите целое число, определяющее длину части дороги из которой Беси не сможет сбежать.
 
Ввод Вывод
5
8 1
1 4
8 8
7 15
4 20
14

Удаление чисел

Задачи на моделирование Целые числа Идеи

В ряд выписаны натуральные числа от 1 до n и задано натуральное число k.
Выполняется один или несколько шагов по удалению чисел в этом ряду. На
очередном шаге оставшиеся числа просматриваются в возрастающем порядке, и каждое k-е число удаляется. Если после очередного шага осталось меньше k чисел, то процесс удаления чисел завершается.
Необходимо определить, на каком шаге будет удалено число n, или выяснить, что оно не будет удалено до завершения процесса.
Например, пусть n = 13, k = 2.
- На первом шаге будут удалены числа 2, 4, 6, 8, 10 и 12, останутся числа 1, 3, 5, 7, 9, 11 и 13.
- На втором шаге будут удалены числа 3, 7 и 11, останутся числа 1, 5, 9 и 13.
- На третьем шаге будут удалены числа 5 и 13, останутся числа 1 и 9.
- На четвертом шаге будет удалено число 9, останется число 1. Поскольку осталось одно число, процесс завершается.
Таким образом, число 13 будет удалено на третьем шаге.
Требуется написать программу, которая по заданным числам n и k определяет, на каком шаге будет удалено число n.
Формат входных данных
Первая строка входных данных содержит целое число n (3 ≤ n ≤ 1018).
Вторая строка входных данных содержит целое число k (2 ≤ k ≤ 100, k < n).
Формат выходных данных
Требуется вывести одно целое число — номер шага, на котором будет удалено число n, или число 0, если число n не будет удалено.
 
Ввод Вывод
13
2
3


 

Турнир

Задачи на моделирование Задача на реализацию Структуры данных

В турнире участвуют N команд. Турнир проводится по олимпийской системе (команды играют на вылет, проигравшие команды выбывают из турнира, выигравшие проходят в следующий тур, ничьих не бывает). Число команд в этой задаче будет степенью двойки: N = 2 k .

Все команды пронумерованы числами от 1 до N. В первом туре играют команды с номерами 1 и 2, 3 и 4, 5 и 6 и т. д., всего играется N/2 матчей. По результатам этих матчей команды выходят во второй тур. Во втором туре играют победители первой и второй игры первого тура, победители третьей и четвёртой игры первого тура и т. д. Они выходят в третий тур. В третьем туре играют вместе победители первой и второй игры второго тура, победители третьей и четвёртой игры второго тура и т. д.

Вам даны результаты всех матчей. Определите номер команды, которая стала победителем турнира.
В первой строке входных данных записано число N – количество команд, участвовавших в турнире. Оно является степенью двойки и может принимать значения от 20 = 1 до 216 = 65536. Следующие N − 1 строк содержат результаты всех сыгранных матчей. Первые N/2 строк из них являются результатами матчей первого тура, затем идёт N/4 строк с результатами второго тура, N/8 строк с результатами третьего тура и т. д.

Результат каждого матча является одним из двух возможных чисел: 1 или 2. Число 1 означает, что в матче выиграла первая команда (номер которой меньше), число 2 означает, что в матче выиграла вторая команда (номер которой больше).
Программа должна вывести одно число – номер победившей в турнире команды.
 

Ввод Вывод
8
1
2
2
1
2
1
1
4

Примечание к ответу
Далее нарисована схема турнира для примера из условия. В турнире участвовало 8 команд. Результаты матчей: 1, 2, 2, 1, 2, 1, 1.
В первом туре играли команды 1 и 2, 3 и 4, 5 и 6, 7 и 8. Результаты матчей первого тура: 1, 2, 2, 1, во второй тур вышли команды 1, 4, 6, 7.
Во втором туре играли команды 1 и 4, 6 и 7. Результаты матчей второго тура: 2, 1.
В третий тур вышли команды 4 и 6. В последнем, третьем, туре играют команды 4 и 6, результат матча: 1, поэтому победителем турнира является команда 4.

Ожерелье

Сортировка "пузырьком" Задачи на моделирование

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

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

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

Входные данные
Первая строка входных данных содержит  число N (2 ≤ N ≤ 50).

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

Выходные данные
Ваша программа должна вывести описание процесса упорядочения.

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

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

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

Ввод Вывод
4
3 1 2 4
4 2
4 1
0

Наша Таня громко плачет

Задачи на моделирование Динамическое программирование

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

Сегодня рабочий день системного администратора Миши начался со звонка секретаря Тани, которая в очередной раз не справилась с редактированием документа. Миша моментально пришёл к Тане и узнал, что в результате ошибки в папке на ее компьютере оказалось n копий документа, над которым она сейчас работает. Других документов в папке нет. Таня просит Мишу удалить лишние копии, чтобы у неё осталась ровно одна копия нужного файла.

Таня работает в операционной системе Bububuntu, в которой есть две команды, позволяющие удалять файлы. Первая команда удаляет один произвольный файл с компьютера. На выполнение этой команды Миша тратит A секунд. Вторая команда рассчитана как раз на случай, подобный Таниному, и позволяет уменьшить количество копий файла в k раз. В силу технический особенностей Bububuntu эта команда работает, только если количество файлов в папке делится на k без остатка. На выполнение этой команды Миша тратит B секунд.

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

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

 

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

В первой строке содержится целое число n ( 1 <= n <= 2*10) - количество копий документа в папке у Тани. 
Во второй строке содержится целое число k ( 1 <= k <= 2*10) - количество раз, в которое уменьшает количество файлов вторая команда.
В третьей строке содержится целое число A ( 1 <= A <= 2*10) - количество секунд, которое Миша тратит на выполнение первой команды.
В четвёртой строке содержится целое число B ( 1 <= B <= 2*10) - количество секунд, которое Миша тратит на выполнение второй команды.

 

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

Выведите единственное число - минимальное количество секунд, которое придётся потратить Мише на решение проблемы.

 

Примечание

В первом тестовом примере оптимальная стратегия Миши такова:

  • За 3 секудны удалить один файл, в результате чего в папке останется 8 файлов. Обратите внимание, что Миша не мог использовать вторую команду, потому что 9 не делится на 2 .
  • За 1 секунду уменьшить число файлов в 2 раза. После этой операции в папке останется 4 файла.
  • За 1 секунду уменьшить число файлов в 2 раза. После этой операции в папке останется 2 файла.
  • За 1 секунду уменьшить число файлов в 2 раза. После этого в папке останется 1 файл и цель Миши будет выполнена.

На выполнение этих четырёх операций Миша потратит 6 секунд. Можно показать, что Миша не сможет удалить лишние файлы меньше, чем за 6 секунд.

Во втором тестовом примере Мише выгодно 4 раза удалить один файл. Так как на одно удаление Миша тратит 2 секунды, на выполнение всего задания Миша потратит 4·2 = 8 секунд. Кроме того, Миша мог бы удалить лишние файлы, один раз воспользовавшись второй командой, но, так как её выполнение занимает 20 секунд, Мише это не выгодно.
 

 
Примеры
Входные данные Выходные данные
1 9
2
3
1
6
2 5
5
2
20
8
3 19
3
4
2
12

Экономическая грамотность

Условный оператор Задачи на моделирование

Многие банки при оплате покупок их банковскими картами предлагают систему возврата части потраченных средств, называемую cashback .

Мама Алёны имеет три подобные карты с разными условиями возврата части потраченной суммы. На карту банка RR возвращается 5 рублей из каждых полных 100 рублей стоимости одной покупки. Например, 5 рублей возвращается и за покупку стоимостью 100 рублей, и 199 рублей. Банк BB возвращает 2 рубля с каждых 50 рублей покупки, и за покупку стоимостью 199 рублей он вернет уже 6 рублей. А банк ММ возвращает 3% с полной стоимости любой покупки (заметим, что при цене в целом числе рублей, 3% всегда будут составлять целое число копеек), поэтому за покупку в 199 рублей вернется 5 руб. 97 коп.

Алёна любит ходить вместе с мамой за покупками. Мама предложила Алёне определять, какую покупку какой картой оплачивать, чтобы сумма возврата была максимально возможной. Считайте, что оплата любой покупки возможна любой картой. Если какие-то две или все три карты дают лучшую сумму возврата с точностью до копеек, то Алёна выбирает ту из карт, которая ей больше нравится по оформлению. Больше всего Алёна любит карту банка MM, затем идёт карта банка BB, а меньше всего Алёне нравится карта банка RR.


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

Вводится одно целое число ( 1 <= S <= 10 000 ) — стоимость покупки в рублях.


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

Выведите название банка RR BB или MM в зависимости от того, картой какого банка выгоднее оплатить эту покупку. А при равенстве суммы возврата - название банка, определённого в условии задачи.

 

Примечание

В первом примере только банк MM вернёт часть суммы покупки. Второй пример разобран в условии задачи.

 
Примеры
Входные данные Выходные данные
1 10 MM
2 199 BB
3 101 RR

Полимино

Эвристические методы Задачи на моделирование

Известный математик Соломон В. Голомб предложил название полимино для связной фигуры, вырезанной из клетчатой бумаги по линиям сетки. Фигура называется связной, если из любой ее клетки можно добраться в любую другую, переходя из клетки в клетку через их общую сторону. Шахматист, добавил Голомб, сказал бы, что из любой клетки полимино можно дойти ладьей в любую другую. На рис. 1 приведены примеры восьми полимино.

Саша увлекается полимино. Для своих экспериментов она вырезает новое полимино из бумаги в клеточку или из старых полимино, оставшихся после предыдущих попыток. Далеко не всегда из старого полимино (рис. 2а, слева) можно вырезать новое (рис. 2а, справа). Поэтому Саша может перед вырезанием нового полимино разделить каждую клетку старого полимино на K2 одинаковых квадратных клеток меньшего размера (см. рис. 2б, здесь K = 2).
 

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

Например, на рис. 2б приведены все возможные способы вырезания полимино, приведенного на рис. 2а, при K = 2.

Напишите программу, которая ответит на интересующий Сашу вопрос.


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

Первая строка входных данных содержит число K (1 ≤ K ≤ 10 000).

Далее следуют описания двух полимино, сначала нового, затем старого. Каждое полимино задается следующим образом — в первой строке описания задаются размеры H (высота) и W (ширина) минимально возможного прямоугольника, в котором можно разместить данное полимино. Следующие Н строк содержат по W символов описания клеток. При этом клетка, входящая в полимино, обозначается символом « X» (прописная латинская буква «икс»), а не входящая — символом «.» (точка). Количество клеток в каждом полимино не превышает 300.


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

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

Цифровое табло

Задачи на моделирование Двумерные массивы

В комнате у Аркадия Семеновича Тапкина стоят электронные часы. Цифры на этих часах показываются в специальной псевдографике. А именно каждое поле, на котором изображается цифра, состоит из \(w\) ячеек в ширину и \(h\) ячеек в высоту (при этом ячейки на поле имеют форму квадратов).

Но недавно у Аркадия Семеновича появилась проблема. Последнее время он стал плохо видеть. В связи с этим он хочет увеличить изображение этих цифр. Он уже приладил старый \(19''\) монитор к часам, и теперь дело осталось за малым. Осталось написать программу, которая будет рисовать цифры на дисплее. Аркадий Семенович хочет увеличить изображение в \(k\) раз и сделать толщину линий равной \(d\). Помогите ему в этом.

Опишем более формально понятие <<увеличить в \(k\) раз>>. Занумеруем ячейки поля \(w \times h\) сверху вниз и слева направо. Таким образом, верхняя левая ячейка имеет координаты \((0, 0)\), правая нижняя — \((w - 1, h - 1)\), правая верхняя — \((w - 1, 0)\), левая нижняя — \((0, h - 1)\). Кроме этого, введем декартову прямоугольную систему координат так, что начало координат находится в центре верхней левой ячейки, ось \(Ox\) направлена вправо, ось \(Oy\) — вниз, длину единичного отрезка примем равной длине стороны ячейки. Таким образом, координаты центра ячейки совпадают с ее координатами во введенной нумерации.

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

Увеличенная в \(k\) раз цифра рисуется на поле размером \((w - 1) \cdot (k - 1) + w\) ячеек по горизонтали на \((h - 1) \cdot (k - 1) + h\) ячеек по вертикали.

При увеличении некоторой цифры в \(k\) раз производятся следующие операции. Координаты точек, являющихся концами отрезков, составляющих цифру, умножаются на \(k\). После этого закрашиваются те ячейки, через центры которых проходят эти отрезки. Эти ячейки будем называть основными.

После этого, для того, чтобы получить толщину линий равную \(d\), дополнительно закрашиваются те ячейки, центры которых располагаются на расстоянии, не превышающем \((d - 1)\) от центров основных ячеек. Расстоянием между точками \(A(x_A, y_A)\) и \(B(x_B, y_B)\) будем называть число \(\rho(A, B) = |x_A - x_B| + |y_A - y_B|\).

По описанию цифры и параметрам \(k\) и \(d\) выведите изображение цифры, увеличенное в \(k\) раз, с толщиной линий \(d\).

Формат входных данных
Первая строка содержит целые числа \(k\) и \(d\) (\(1 \le k \le 100\), \(1 \le d \le 500\)). Вторая строка содержит целые числа \(w\) и \(h\) (\(1 \le w, h \le 10\)).

Третья строка содержит целое число \(n\) (\(1 \le n \le 100\)) — количество отрезков в описании цифры. Далее следуют \(n\) строк, каждая из которых описывает один отрезок. Описание отрезка состоит из четырех целых чисел: \(x_1\), \(y_1\), \(x_2\), \(y_2\) (\(0 \le x_1, x_2 < w\), \(0 \le y_1, y_2 < h\)) — координат концов отрезка.

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

Формат выходных данных
Выходные данные должны содержать ровно \((h - 1) \cdot (k - 1) + h\) строк по \((w - 1) \cdot (k - 1) + w\) символов в каждой, \(j\)-ый символ \(i\)-ой строки должен быть равен символу <<*>> (звездочка), если ячейка с центром в точке \((j,i)\) закрашена, и символу <<.>> (точка) — иначе.

Форматирование документа

Алгоритмы на строках Задачи на моделирование

Вася пишет новую версию своего офисного пакета <<Closed Office>>. Недавно он начал работу над редактором <<Dword>>, входящим в состав пакета.

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

Документ в формате редактора <<Dword>> представляет собой последовательность абзацев. Каждый абзац представляет собой последовательность элементов — слов и рисунков. Элементы одного абзаца разделены пробелами и/или переводом строки. Абзацы разделены пустой строкой. Строка, состоящая только из пробелов, считается пустой.

Слово — это последовательность символов, состоящая из букв латинского алфавита, цифр, и знаков препинания: <<.>>, <<,>>, <<:>>, <<;>>, <<!>>, <<?>>, <<->>, <<>>.

Рисунок описывается следующим образом: <<(image параметры рисунка)>>. Каждый параметр рисунка имеет вид <<имя=значение>>. Параметры рисунка разделены пробелами и/или переводом строки. У каждого рисунка обязательно есть следующие параметры:

Параметр Описание
width Целое положительное число — ширина рисунка в пикселях
height Целое положительное число — высота рисунка в пикселях
layout Одно из следующих значений: embedded (в тексте), surrounded (обтекание текстом), floating (свободное) — описывает расположение рисунка относительно текста

Документ размещается на бесконечной вверх и вниз странице шириной \(w\) пикселей (разбиение на конечные по высоте страницы планируется в следующей версии редактора). Одна из точек на левой границе страницы условно считается точкой с ординатой равной нулю. Ордината увеличивается вниз.

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

Абзац размещается следующим образом. Элементы располагаются по строкам. Каждая строка исходно имеет высоту \(h\) пикселей. В процессе размещения рисунков высота строк может увеличиваться, и строки могут разбиваться рисунками на фрагменты.

Слова размещаются следующим образом. Считается, что каждый символ имеет ширину \(c\) пикселей. Перед каждым словом, кроме первого во фрагменте, ставится пробел шириной также в \(c\) пикселей. Если слово помещается в текущем фрагменте, то оно размещается на нем. Если слово не помещается в текущем фрагменте, то оно размещается в первом фрагменте текущей строки, расположенном правее текущего, в котором оно помещается. Если такого фрагмента нет, то начинается новая строка, и поиск подходящего фрагмента продолжается в ней. Слово всегда <<прижимается>> к верхней границе строки.

Размещение рисунка зависит от его расположения относительно текста.

Если расположение рисунка относительно текста установлено в <<embedded>>, то он располагается так же как слово, за тем исключением, что его ширина равна ширине, указанной в параметрах рисунка. Кроме того, если высота рисунка больше текущей высоты строки, то она увеличивается до высоты рисунка (при этом верхняя граница строки не перемещается, а смещается вниз нижняя граница). Если рисунок типа <<embedded>> не первый элемент во фрагменте, то перед ним ставится пробел шириной \(c\) пикселей. Рисунки типа <<embedded>> также прижимаются к верхней границе строки.

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

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

Если расположение рисунка относительно текста установлено в <<floating>>, то рисунок размещается поверх текста и других рисунков и никак с ними не взаимодействует. В этом случае у рисунка есть два дополнительных параметра: <<dx>> и <<dy>> — целые числа, задающие смещение в пикселях верхнего левого угла рисунка вправо и вниз, соответственно, относительно позиции, где находится верхний правый угол предыдущего слова или рисунка (или самой левой верхней точки первой строки абзаца, если рисунок — первый элемент абзаца).

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

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

По заданным \(w\), \(h\), \(c\) и документу найдите координаты верхних левых углов всех рисунков в документе.

Формат входных данных
Первая строка содержит три целых числа: \(w\), \(h\) и \(c\) (\(1 \le w \le 1000\), \(1 \le h \le 50\), \(1 \le c \le w\)).

Далее следует документ. Размер входного файла не превышает 1000 байт. Гарантируется, что ширина любого слова и любого рисунка не превышает \(w\). Высота всех рисунков не превышает \(1000\). Относительное смещение всех рисунков типа <<floating>> не превышает \(1000\) по абсолютной величине.

Формат выходных данных
Выведите по два числа для каждого рисунка — координаты его верхнего левого угла. Выводите координаты рисунков в том порядке, в котором они встречаются во входных данных.

 

Изображение таблицы

Строки Задачи на моделирование

При разработке программ для просмотра веб-страниц одной из наиболее сложных задач является корректное отображение таблиц. Компания <<Kozilla>>, в которой вы работаете, планирует разработать новую версию браузера <<Waterrat>> для работы в терминальном режиме, и просит вас написать фрагмент ядра отображения веб-страниц, ответственный за формирование структуры таблиц.

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

Таблица состоит из строк, каждая строка состоит из одной или нескольких ячеек, \(j\)-я ячейка \(i\)-й строки имеет ширину \(a_{i,j}\).

По заданным параметрам таблицы постройте символическое изображение ее структуры.

Формат входных данных
Первая строка содержит \(n\) — количество строк в таблице (\(1 \le n \le 100\)). Следующие \(n\) строк входного файла содержат описание строк таблицы.

Описание каждой строки включает число \(m_i\) — количество ячеек этой строки, и \(m_i\) целых чисел \(a_{i,1}, a_{i,2}, \dots, a_{i,m_i}\) — ширину каждой из ячеек строки (\(1 \le m_i \le 10\), \(1 \le a_{i,j} \le 20\)).

Формат выходных данных
Выведите символическое изображение структуры таблицы.

Изображение \(i\)-й строки таблицы должно начинаться изображением горизонтальной линии, составленным из символов <<+>> (плюс) и <<->> (минус). Затем должна следовать строка, содержащая пробелы и символы <<|>> (вертикальная черта). Первым символом строки должна быть вертикальная черта, затем \(a_{i,1}\) пробелов, затем вертикальная черта, затем \(a_{i,2}\) пробелов, и так далее, всего \(m_i\) блоков пробелов. После последнего блока должна следовать вертикальная черта. После последней строки таблицы также должно следовать изображение горизонтальной линии.

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

На лифтах через пропасть

Задачи на моделирование

Сережа очень любит старые игры. Недавно он нашел у себя на компьютере одну старую приключенческую игру. Управляя героем, надо перемещаться по карте и собирать различные предметы.

На определенном этапе игры Сережа столкнулся с неожиданной проблемой. Для продолжения приключений герою надо перебраться через пропасть. Для этого можно использовать последовательно расположенные лифты, которые имеют вид горизонтальных платформ. Каждый лифт вертикально перемещается туда-сюда между некоторыми уровнями. Герой может переходить между соседними платформами, однако это можно сделать только в тот момент, когда они находятся на одном уровне. Аналогично с края пропасти на лифт и обратно можно перейти лишь в тот момент, когда лифт окажется на уровне края.

Каждый лифт имеет ширину равную четырем метрам. В начале герой находится на расстоянии два метра от края пропасти. Он должен закончить свое путешествие в двух метрах от противоположного края пропасти. Герой перемещается со скоростью два метра в секунду. Таким образом, если герой находится в начальном положении или в центре лифта и хочет перейти на соседний лифт (или сойти с последнего лифта на противоположный край пропасти), он должен начать движение ровно за одну секунду до того момента, когда они окажутся на одном уровне. Через две секунды герой оказывается в центре соседнего лифта (или в конечном положении).

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

Формат входных данных
Первая строка содержит целое число \(n\) — количество лифтов (\(1 \le n \le 100\)). Следующие \(n\) строк содержат описания лифтов.

Каждое описание состоит из четырех целых чисел: \(l\), \(u\), \(s\) — самое нижнее, самое верхнее и начальное положение лифта относительно края пропасти в метрах (\(-100 \le l \le s \le u \le 100\), \(l < u\)), и \(d\) — направление движения лифта в начальный момент (\(d = 1\) означает, что лифт двигается вверх, \(d = -1\) — вниз).

Формат выходных данных
Выведите минимальное время в секундах, необходимое чтобы перебраться на противоположный край пропасти. Если перебраться на противоположный край пропасти невозможно, выведите в выходной файл \(-1\).

Тупики

Сканирующая прямая Куча Задачи на моделирование

На вокзале есть K тупиков, куда прибывают электрички. Этот вокзал является их конечной станцией, поэтому электрички, прибыв, некоторое время стоят на вокзале, а потом отправляются в новый рейс (в ту сторону, откуда прибыли).

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

Тупики пронумерованы числами от 1 до K. Когда электричка прибывает, ее ставят в свободный тупик с минимальным номером. При этом если электричка из какого-то тупика отправилась в момент времени X, то электричку, которая прибывает в момент времени X, в этот тупик ставить нельзя, а электричку, прибывающую в момент X+1 — можно.

Напишите программу, которая по данному расписанию для каждой электрички определит номер тупика, куда прибудет эта электричка.

Входные данные
Сначала вводятся число K — количество тупиков и число N — количество электропоездов (1≤K≤100000, 1≤N≤100000). Далее следуют N строк, в каждой из которых записано по 2 числа: время прибытия и время отправления электрички. Время задается натуральным числом, не превышающим 109. Никакие две электрички не прибывают в одно и то же время, но при этом несколько электричек могут отправляться в одно и то же время. Также возможно, что какая-нибудь электричка (или даже несколько) отправляются в момент прибытия какой-нибудь другой электрички. Время отправления каждой электрички строго больше времени ее прибытия.

Все электрички упорядочены по времени прибытия. Считается, что в нулевой момент времени все тупики на вокзале свободны.

Выходные данные
Выведите N чисел — по одному для каждой электрички: номер тупика, куда прибудет соответствующая электричка. Если тупиков не достаточно для того, чтобы организовать движение электричек согласно расписанию,  выведите два числа: первое должно равняться 0 (нулю), а второе содержать номер первой из электричек, которая не сможет прибыть на вокзал.

Парикмахерская

Задачи на моделирование

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

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

Входные данные
В первой строке вводится натуральное число N, не превышающее 100 – количество клиентов.

N строках вводятся времена прихода клиентов – по два числа, обозначающие часы и минуты (часы – от 0 до 23, минуты – от 0 до 59). Времена указаны в порядке возрастания (все времена различны).
Гарантируется, что всех клиентов успеют обслужить до полуночи.

Выходные данные
Требуется вывести N пар чисел: времена выхода из парикмахерской 1-го, 2-го, …, N-го клиента (часы и минуты).

Детский праздник

Бинарный поиск по ответу Сканирующая прямая Задачи на моделирование

Организаторы детского праздника планируют надуть для него M воздушных шариков. С этой целью они пригласили N добровольных помощников, i-й среди которых надувает шарик за Ti минут, однако каждый раз после надувания Zi шариков устает и отдыхает Yi минут. Теперь организаторы праздника хотят узнать, через какое время будут надуты все шарики при наиболее оптимальной работе помощников, и сколько шариков надует каждый из них. (Если помощник надул шарик, и должен отдохнуть, но больше шариков ему надувать не придется, то считается, что он закончил работу сразу после окончания надувания последнего шарика, а не после отдыха).

Входные данные
В первой строке входных данных задаются числа M и N (0 <= M <= 15000, 1 <= N <= 1000). Следующие N строк содержат по три целых числа - Ti, Zi и Yi  соответственно (1 <= Ti, Yi <= 100, 1 <= Zi <= 1000).

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

Маджонг

Задачи на моделирование Очередь

Петя недавно узнал о существовании игры маджонг. Она ему показалась настолько интересной, что он играет в нее целыми днями. Для этой игры необходима прямоугольная доска размером m x n полей и набор фишек разных цветов. При этом фишек каждого цвета в наборе должно быть ровно две. В начале игры фишки располагаются на доске произвольным образом.

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


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

Цель игры состоит в том, чтобы сделать как можно больше ходов.

Задана начальная расстановка фишек на доске. Требуется найти самую длинную последовательность ходов, которую может сделать Петя из заданной позиции.
Входные данные
Первая строка входного файла содержит размеры доски: два целых числа m и n (1 ≤ m, n ≤ 300, хотя бы одно из этих чисел четно). Далее следуют m строк по n
 чисел в каждой, j-е число в i-й из этих строк представляет собой номер цвета j-й слева фишки в i-й горизонтали. Цвета пронумерованы натуральными числами от 1 до n*m / 2. На доске ровно две фишки каждого цвета.

Выходные данные
В первой строке выходного файла выведите k — максимальное количество ходов, которое может сделать Петя из заданной начальной позиции. Во второй строке выходного файла выведите разделенные пробелами k чисел — номера цветов фишек в том порядке, в котором они должны сниматься с доски. Если возможных ответов несколько, выведите любой.

Сортировка вагонов

Стек Задачи на моделирование

К тупику со стороны пути 1 (см. рисунок) подъехал поезд. Разрешается отцепить от поезда один или сразу несколько первых вагонов и завезти их в тупик (при желании, можно даже завезти в тупик сразу весь поезд). После этого часть из этих вагонов вывезти в сторону пути 2. После этого можно завезти в тупик еще несколько вагонов и снова часть оказавшихся вагонов вывезти в сторону пути 2. И так далее (так, что каждый вагон может лишь один раз заехать с пути 1 в тупик, а затем один раз выехать из тупика на путь 2). Заезжать в тупик с пути 2 или выезжать из тупика на путь 1 запрещается. Нельзя с пути 1 попасть на путь 2, не заезжая в тупик.




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

Входные данные
Вводится число N — количество вагонов в поезде (1 ≤ N ≤ 2000). Дальше идут номера вагонов в порядке от головы поезда, едущего по пути 1 в сторону тупика. Вагоны пронумерованы натуральными числами от 1 до N, каждое из которых встречается ровно один раз.

Выходные данные
Если сделать так, чтобы вагоны шли в порядке от 1 до N, считая от головы поезда, когда поезд поедет по пути 2 из тупика, можно, выведите действия, которые нужно проделать с поездом. Каждое действие описывается двумя числами: типом и количеством вагонов:

если нужно завезти с пути 1 в тупик K вагонов, должно быть выведено сначала число 1, а затем — число K (K≥1),
если нужно вывезти из тупика на путь 2 K вагонов, должно быть выведено сначала число 2, а затем — число K (K≥1).
Если возможно несколько последовательностей действий, приводящих к нужному результату, выведите любую из них.

Если выстроить вагоны по порядку невозможно, выведите одно число 0.

 

Примеры
Входные данные Выходные данные
1 3
3 2 1
1 3
2 3
2 4
4 1 3 2
1 2
2 1
1 2
2 3
3 3
2 3 1
0

Сортировка вагонов

Стек Задачи на моделирование

К тупику со стороны пути 1 (см. рисунок) подъехал поезд. Разрешается отцепить от поезда один или сразу несколько первых вагонов и завезти их в тупик (при желании, можно даже завезти в тупик сразу весь поезд). После этого часть из этих вагонов вывезти в сторону пути 2. После этого можно завезти в тупик еще несколько вагонов и снова часть оказавшихся вагонов вывезти в сторону пути 2. И так далее (так, что каждый вагон может лишь один раз заехать с пути 1 в тупик, а затем один раз выехать из тупика на путь 2). Заезжать в тупик с пути 2 или выезжать из тупика на путь 1 запрещается. Нельзя с пути 1 попасть на путь 2, не заезжая в тупик.




Известно, в каком порядке изначально идут вагоны поезда. Требуется с помощью указанных операций сделать так, чтобы вагоны поезда шли по порядку (сначала первый, потом второй и т.д., считая от головы поезда, едущего по пути 2 в сторону от тупика). Напишите программу, определяющую, можно ли это сделать.

Входные данные
Вводится число N — количество вагонов в поезде (1 ≤ N ≤ 100). Дальше идут номера вагонов в порядке от головы поезда, едущего по пути 1 в сторону тупика. Вагоны пронумерованы натуральными числами от 1 до N, каждое из которых встречается ровно один раз.

Выходные данные
Если сделать так, чтобы вагоны шли в порядке от 1 до N, считая от головы поезда, когда поезд поедет по пути 2 из тупика, можно, выведите сообщение YES, если это сделать нельзя, выведите NO.

 

Примеры
Входные данные Выходные данные Примечание
1 3
3 2 1
YES Надо весь поезд завезти в тупик, а затем целиком вывезти его на 2-й путь.
2 4
4 1 3 2
YES Сначала надо в тупик завезти два вагона, один из которых оставит в тупике, а второй — вывезти на 2-й путь, после чего завезти в тупик еще два вагона и вывезти 3 вагона, стоящие в тупике, на 2-й путь
3 3
2 3 1
NO  

Фитнесс-клуб

Задачи на моделирование

В последнее время фитнесс-клубы стали очень популярны среди жителей столицы Флатландии. В такие клубы люди ходят после работы для того, чтобы поддерживать себя в хорошей физической форме. В фитнесс-клубe «Флат» каждому из посетителей на время посещения выделяется один из k шкафчиков, в который он может убрать свои вещи на время тренировки.

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

Некоторые из посетителей уходя закрывают шкафчик, а другие не закрывают. Так как все посетители фитнесс-клуба посещают его уже достаточно давно, то про каждого из них персонал клуба знает, закроет ли он свой шкафчик, когда будет уходить. Таким образом, для каждой трени- ровки известно два числа: число ai посетителей, которые закроют шкафчик, и число bi посетителей, которые не закроют.

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

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

Входные данные
Первая строка входного файла содержит два целых числа: n (1≤n≤100) и k (1≤k≤1000) Каждая из последующих n строк содержит по два целых числа ai и bi (0≤ai,bi≤k, ai+bi≤k).

Выходные данные
В выходной файл выведите одно число — ответ на задачу.

Примечание
Пронумеруем шкафчики числами от 1 до 4. Посетителям, пришедшим на первую тренировку выдадим ключи так: тому, кто закроет, от шкафчика 1, тем, кто не закроет, от 2 и 3. Посетителям, пришедшим на вторую тренировку, выдадим ключи так: тому, кто закроет, номер 2, тому, кто не закроет, номер 3. В итоге открытым после окончания дня останется только шкафчик номер 3.

Исследование зеркальных цветов

Бинарный поиск по ответу Задачи на моделирование

Члены экипажа космического корабля «Пегас» приземлились на третьей планете Системы Медуза, для изучения зеркальных цветов. Их корабль приземлился в начале узкого поля фермы, на которой выращивают цветы. Зеркальные цветы начинают прорастать после полуночи. Любезные работники фермы предоставили экипажу план прорастания цветов в виде точки и времени прорастания. Экипажу корабля необходимо улетать с планеты в следующую полночь. Исследовательская группа корабля может передвигаться по планете с максимальной скоростью vmax. На исследование одного цветка группе необходимо время d. Исследовать цветок необходимо сразу весь, нельзя будет к нему вернуться позже. Цветы прорастают тем позже, чем дальше они расположены от начала поля. В одной точке прорастает только один цветок, и каждый цветок прорастает в свой момент времени. Нет двух цветков, которые бы проросли одновременно.
Команда экипажа хочет определить момент времени, когда исследовательская группа сможет вернуться на корабль, исследовав все цветы и затратив на исследование как можно меньше времени.

Входные данные
Программа получает на вход несколько строк. Первая строка содержит 2 целых числа через один пробел: vmax (в см/мин) и d (в минутах), 0 < vmax <= 200, 0 <= d <= 500.
Вторая строка содержит одно число N – количество цветов (в штуках). 0 <= N <= 1400 при d = 0, в противном случае 0 <= N <= 200.
Далее идут N строк, в каждой из которых записано по два числа через пробел: целое число xi – расстояние от цветка до начала поля (в сантиметрах), 0 <= xi <= 32767, и число ti – момент прорастания цветка (в формате hh:mm). Пары приведены в порядке возрастания расстояний.

Выходные данные
Выведите момент времени возвращения исследовательской группы на корабль (в формате hh:mm), округленный до целых минут в большую сторону.

Примечания
1. В часе - 60 минут, в сутках - 24 часа.
2. Время в сутках изменяется от 00:00 до 23:59.
3. Можно считать, что исследовательская группа не меняет направления движения до тех пор, пока не дойдет до последнего цветка.

 

Примеры
Входные данные Выходные данные
1
3 1 
1
100 00:01
01:08
 

iDishwasher

Задачи на моделирование

Создатели модного гаджета iDishwasher (обычная посудомоечная машина с нарисованной на ней надкусанной грушей и продающаяся по баснословной цене) решили добавить в стандартную прошивку игру, которая поможет развлечься домохозяйкам, скучающим во время мытья посуды. Игра похожа на шахматы, правда играют в нее не фигурами, а шахматными клетками. В настольной версии игры дается набор черных и белых полей, из которых необходимо составить квадратную шахматную доску максимального размера. В посудомоечной версии игры дается не набор, а количество полей черного и белого цветов. И в качестве ответа нужно не составить доску, а вывести сторону максимального «шахматного» квадрата, который можно составить из данных клеток. Поскольку не вся целевая аудитория справляется с этой интеллектуальной игрой, вам требуется написать программу, которая поможет отчаявшимся пользователям гаджета.

Входные данные
Единственная строка содержит числа B и W задающие количество белых и черных клеток соответственно (0≤B,W≤10000).

Выходные данные
Выведите одно число — максимальную длину стороны квадрата, который можно составить из данных клеток. Или слово "Impossible" если нельзя составить ни одного квадрата.

Часы с боем

Задачи на моделирование

Старинные часы бьют каждые полчаса. Причем в начале каждого часа они бьют столько раз, сколько сейчас часов (по 1 разу – в час ночи и в час дня, по 2 раза – в два часа ночи в два часа дня и т.д., в полночь и в полдень они бьют, соответственно, по 12 раз). И еще 1 раз они бьют в середине каждого часа.

Дан промежуток времени (известно, что прошло строго меньше 24 часов). Напишите программу, определяющую, сколько ударов сделали часы за это время.

Входные данные
В первой строке записан начальный момент времени, во второй строке — конечный. Моменты времени задаются двумя целыми числами, разделяющимися пробелом. Первое число задает часы (от 0 до 23), второе — минуты (от 1 до 59, при этом оно не равно 30).

Выходные данные
Выведите одно число — сколько ударов сделали часы за этот отрезок времени.

Путь запроса от браузера к серверу

Задачи на моделирование

Ты ввёл silvertests.ru в адресной строке и нажал Enter. В каком порядке всё происходит?

  1. HTTP-запрос → DNS → HTTP-ответ → отрисовка
  2. Отрисовка → HTTP-ответ → DNS → HTTP-запрос
  3. DNS → HTTP-ответ → HTTP-запрос → отрисовка
  4. DNS → HTTP-запрос → HTTP-ответ → отрисовка

Что происходит с программой, когда она запускается на компьютере?

Задачи на моделирование

Что происходит с программой, когда она запускается на компьютере?

  1. Программа загружается в жесткий диск, и операционная система резервирует пространство для данных.
     
  2. Программа загружается в оперативную память, и операционная система резервирует дополнительную оперативную память для использования программой во время ее работы.
     
  3. Программа загружается в кэш процессора, и операционная система резервирует кэш для данных.
     
  4. Программа загружается в видеокарту, и операционная система резервирует видеопамять для данных.

21745

Задачи на моделирование

Редактирование документа является процессом

1. сбора информации
2. обработки информации
3. хранения информации
4. передачи информации

21739

Задачи на моделирование

В каком из вариантов ответов верно соблюден порядок осуществления информационных процессов?

1. сбор, передача, обработка, хранение
2. сбор, хранение, передача, обработка
3. сбор, обработка, хранение, передача
4. сбор, хранение, передача, обработка

18760

Задачи на моделирование

Пользователь находился в каталоге Расписание. Сначала он поднялся на один уровень вверх, затем спустился на один уровень вниз, потом ещё раз спустился на один уровень вниз. В результате он оказался в каталоге C:\учёба\химия\ГИА Укажите полный путь каталога, с которым пользователь начинал работу.

1) C:\Расписание
2) C:\учёба\2013\Расписание
3) C:\учёба\химия\Расписание
4) C:\учёба\Расписание

18756

Задачи на моделирование

Пользователь работал с каталогом Химия. Сначала он поднялся на один уровень вверх, затем спустился на один уровень вниз, потом ещё раз спустился на один уровень вниз. В результате он оказался в каталоге C:\Школа\Уроки\Информатика Запишите полный путь каталога, с которым пользователь начинал работу.

1) C:\Школа\Уроки\Химия
2) C:\Химия
3) C:\Школа\Уроки\Класс\Химия
4) C:\Школа\Химия

18749

Задачи на моделирование

Пользователь находился в каталоге Расписание. Сначала он поднялся на один уровень вверх, затем спустился на один уровень вниз, потом ещё раз спустился на один уровень вниз и ещё раз спустился на один уровень вниз. В результате он оказался в каталоге C:\учёба\химия\ГИА Укажите полный путь каталога, с которым пользователь начинал работу.

1) C:\учёба\2013\Расписание
2) C:\учёба\Расписание
3) C:\учёба\химия\Расписание
4) C:\Расписание

18748

Задачи на моделирование

Пользователь работал с каталогом C:\Компьютеры\Память. Сначала он спустился в каталог Винчестеры, после этого поднялся на один уровень вверх, затем ещё раз поднялся на один уровень вверх и далее спустился в каталог Процессоры. Укажите полный путь каталога, в котором оказался пользователь.

1) C:\Компьютеры\Процессоры
2) C:\Винчестеры\Процессоры
3) C:\Компьютеры\Память\Винчестеры
4) C:\Компьютеры\Память\Процессоры


18747

Задачи на моделирование

Пользователь находился в каталоге Расписание. Сначала он поднялся на один уровень вверх, затем спустился на один уровень вниз, потом ещё раз спустился на один уровень вниз и ещё раз спустился на один уровень вниз. В результате он оказался в каталоге C:\учёба\информатика\ГИА Укажите полный путь каталога, с которым пользователь начинал работу. 

1) C:\учёба\2013\Расписание
2) C:\учёба\Расписание
3) C:\учёба\информатика\Расписание
4) C:\Расписание


18746

Задачи на моделирование

Пользователь работал с каталогом Логика. Сначала он поднялся на один уровень вверх, затем поднялся ещё на один уровень вверх, потом спустился на один уровень вниз. В результате он оказался в каталоге C:\Школа\Уроки\Химия.
Запишите возможный полный путь каталога, с которым пользователь начинал работу.

1) C:\Школа\Уроки\Информатика\Логика
2) C:\Школа\Уроки\Логика
3) C:\Школа\Логика
4) C:\Школа\Информатика\Логика


1651

Задачи на моделирование

Чтобы процессор смог выполнить программу, она должна быть записана:
1) в ОЗУ
2) в ПЗУ
3) в драйвере
4) процессор не выполняет программы

1606

Задачи на моделирование

 Поиск слова в тексте по заданному образцу является процессом:

1.    хранения информации
2.    передачи информации
3.    обработки информации
4.    уничтожение информации
 

1453

Задачи на моделирование

Пользователь работал с каталогом Участники. Сначала он поднялся на один уровень вверх, затем спустился на один уровень вниз, потом ещё раз спустился на один уровень вниз. В результате он оказался в каталоге C:\Конференция\Секции\Информатика
Запишите полный путь каталога, с которым пользователь начинал работу.

1) C:\Конференция\Регионы\Списки\Участники
2) C:\Конференция\Участники
3) C:\Конференция\Регионы\Участники
4) C:\Участники

1297

Задачи на моделирование

Пользователь работал с каталогом C:\Учеба\Математика\Задания. Сначала он поднялся на один уровень вверх, затем еще раз поднялся на один уровень вверх и после этого спустился в каталог Биология, далее спустился в каталог Оценки. Запишите полный путь каталога, в котором оказался пользователь.


1)С:\Биология\Оценки
2)С:\ Оценки\Биология
3) С:\Учеба\Математика\Биология\Оценки
4) С:\Учеба\Биология\Оценки

1296

Задачи на моделирование

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

1)С:\Срочные\Покупка
2)С:\Документы\Срочные\Покупка
3) С:\Документы\Срочные\Покупка\Продажа  
4) С:\Документы\Договора\Срочные\Покупка

Время (while): длинные перерывы

Задачи на моделирование

В расписании записаны моменты начала каждого урока (часы и минуты). Уроки идут в хронологическом порядке. Перерывом считается промежуток между концом одного урока и началом следующего. Каждый урок длится ровно 45 минут. Определите количество перерывов длительностью более 30 минут.

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

Каждая строка содержит два целых числа: часы и минуты начала урока (0 ≤ часы ≤ 20, 0 ≤ минуты ≤ 59). Последовательность заканчивается строкой «0 0». Она не является временем урока. Гарантируется, что уроков не менее двух.

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

Одно число — количество перерывов длительностью строго более 30 минут.

Приключение на 20 минут

Задачи на моделирование

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

Но вот незадача, Портье ещё не успел освоиться на новом месте, как уже начались проблемы. Недовольные постояльцы вызвали его к себе в номер на шестом этаже, однако, по неопытности он заблудился и зашел в комнату \(404\)!!! А там…Лабиринт.

Лабиринт представляет собой последовательность из \(n\) дверей, расположенных друг за другом на одном этаже. Каждая \(i\)-я дверь покрашена в какой-то цвет \(a_i\), причём на этаже ровно по две двери каждого из цветов.

Допустим, что \(i\)-я и \(j\)-я двери покрашены в один и тот же цвет, причём \(i < j\). В таком случае, если Портье зайдёт в \(i\)-ю дверь, то он окажется между \(j\)-й и \((j+1)\) -й дверьми и сможет дальше зайти в одну из них. Если же он зайдёт в \(j\)-ю дверь, то он окажется между \((i-1)\) -й и \(i\)-й дверьми и далее сможет зайти в одну из них. Если \(i = 1\), то войдя в \(j\)-ю дверь, Портье окажется левее первой двери и далее сможет зайти только в неё же, а если \(j = n\), то войдя в \(i\)-ю дверь, он окажется правее последней двери и выберется из лабиринта.

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

Формат входных данных
В первой строке находится чётное число \(n\) \((2 \le n \le 200\,000)\) — количество дверей в лабиринте.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)), где \(a_i\) — цвет \(i\)-й двери в последовательности. Гарантируется, что в лабиринте ровно по две двери каждого из цветов.

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

 

Ниже на картинке изображено пояснение к первому примеру из условия.

image

Конвейерный отель

Задачи на моделирование

Вы с друзьями уже давно заехали в отель, но только сейчас выяснилось, что в отеле существуют так называемые <<Тихие часы>>. Во время этих часов все должны находиться в своих комнатах, и обойти это ограничение нельзя, потому ключи от комнат на время <<Тихих часов>> забирает персонал отеля. К счастью, вам повезло и вы с друзьями живёте на одном этаже, в последовательных комнатах с номерами от \(1\) до \(n\). Расстояние между соседними комнатами равно 5 метрам.

Вы пришли к достаточно изящной идее, которая поможет справиться со столь сложной ситуацией. За одну ночь под всеми комнатами вы проложили конвейер из \(3n\) ячеек, позволяющий перевозить посылки. Соседние ячейки, так же, как и комнаты, находятся на расстоянии 5 метров друг от друга. Ячейки конвейера с номерами от \(n + 1\) до \(2n\) находятся под комнатами друзей, ячейки с номерами от \(1\) до \(n\) – левее комнаты номер \(1\), а ячейки с номерами от \(2n + 1\) до \(3n\) – правее комнаты с номером \(n\).

В один из таких <<Тихих часов>> каждый друг отправил посылку одному другому другу. Для того, чтобы перемещать посылки, есть две кнопки: <<ВПРАВО>> и <<ВЛЕВО>>, сдвигающие конвейер на 5 метров вправо и влево соответственно.

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

Первая строка входных данных содержит одно целое число \(n\) (\(2 \le n \le 100\,000\)) — число друзей, обменивающихся посылками.

Вторая строка содержит \(n\) целых чисел \(a_i\) (\(1 \le a_i \le n, a_i \ne i\)) — номер друга, которому адресована посылка \(i\)-го из друзей.

Выведите одно целое число — минимальное число нажатий, которое потребуется, чтобы все посылки дошли до адресатов.

Разберём пример из условия. Сначала можно 1 раз нажать кнопку <<ВПРАВО>>, после этого второй друг получит посылку от первого, а третий — от второго. После этого необходимо 2 раза нажать на кнопку <<ВЛЕВО>>, тогда второй друг получит посылку от третьего. И наконец, нужно ещё 2 раза нажать кнопку <<ВЛЕВО>>, после чего первый друг получит посылку от четвёртого. Итого потребуется 5 нажатий.

Демонтаж

Задачи на моделирование

Отель представляет собой последовательность из \(n\) зданий различной высоты, построенных вплотную друг к другу. Не так давно в Отель провели кабельное телевидение, которым все теперь с удовольствием пользуются. Но есть одна проблема: на крыше \(m\)-го здания осталась куча оборудования от спутникового телевидения, которое надо с неё спустить, и вам поручили это сделать.

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

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

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

Формат входных данных
На первой строке вводится два целых числа \(n, m\) \((1 \le m \le n \le 100\,000)\) — число зданий и номер здания, на котором находится оборудование, соответственно.

Вторая строка содержит \(n\) целых чисел \(h_1, h_2, \dots, h_n\) \((1 \le h_i \le 10^9)\) — высоты зданий.

Формат выходных данных
Выведите одно целое число — минимальный размер лестницы, достаточной для демонтажа.

 

В данном примере вам достаточно лестницы длины \(1\), так как вы можете подняться с её помощью на крышу пятого здания, далее добраться по лестницам между крышами на третью крышу, взять оборудование, после чего сначала спуститься по лестнице между третьей и четвертой, а затем — четвертой и пятой крышами. После этого можно спуститься с крыши пятого здания.

image

B. Очередь в школе

Задачи на моделирование

На перемене в школьной столовой образовалась очередь из n человек, в которой стоят мальчики и девочки. Изначально ребята встали в таком порядке, в котором они забежали в столовую. Однако через некоторое время мальчикам стало неловко, что они стоят в очереди перед девочками, и они стали каждую секунду пропускать девочек вперед.

Опишем процесс более точно. Пусть позиции в очереди последовательно пронумерованы целыми числами от 1 до n, причем тот, кто стоит на позиции номер 1 обслуживается первым. Тогда, если в момент времени x на i-ой позиции стоит мальчик, а на (i + 1)-ой — девочка, то в момент времени x + 1 на i-ой позиции будет находиться девочка, а на (i + 1)-ой — мальчик. Моменты времени заданы в секундах.

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

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

В первой строке заданы два целых числа n и t (1 ≤ n, t ≤ 50), обозначающие количество ребят в очереди и время, спустя которое требуется определить, как будет выглядеть очередь.

В следующей строке задана строка s, обозначающая начальную расстановку школьников. Если на i-ой позиции в очереди стоит мальчик, то i-ый символ строки s равен «B», иначе i-ый символ равен «G».

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

Выведите строку a, обозначающую расположение ребят в очереди спустя t секунд. Если на i-ой позиции через заданное время будет стоять мальчик, то i-ый символ a должен быть равен «B», иначе он должен быть равен «G».

Лифт

Задачи на моделирование

В вашем отеле необычный лифт — вместо привычных кнопок для каждого этажа, в нём есть только две:  + 3 и  - 2, перемещающие лифт на три этажа вверх и на два этажа вниз соответственно.

Вы хотите попасть с этажа номер 0 (там находится лобби отеля) на этаж номер D (там находится ваш номер), но не хотите постоянно нажимать на кнопки. За какое минимальное число нажатий вы сможете добраться до D-го этажа?

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

В единственной строке дано одно целое число D ( - 1000 ≤ D ≤ 1000) — номер этажа, на который вы хотите попасть. Обратите внимание, что в отеле есть подземные этажи с отрицательными номерами.

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

Выведите одно число — минимальное число нажатий для перемещения с нулевого этажа на этаж с номером D.

Примечание

В первом примере из условия, чтобы попасть с нулевого этажа на первый, нужно один раз подняться на 3 этажа и 1 раз спуститься на 2 этажа, в итоге получится 2 нажатия кнопок.

Во втором примере из условия, чтобы спуститься на 5 этажей вниз, нужно один раз подняться на 3 этажа и 4 раза спуститься вниз на 2 этажа, таким образом, получится 5 нажатий кнопок.

Why Did the Cow Cross the Road III

Жадный алгоритм Использование сортировки Задачи на моделирование

Фермер Джон на старости лет стал параноиком. Он построил огромную изгородь вокруг фермы для защиты своих коров. Коровам такая идея не понравилась.

Соседние коровы ещё имеют возможность войти, но только через одни ворота и с большой очередью, потому что каждой нужно ответить на длинный список вопросов, прежде чем войти.

Для каждой из \(N\) коров, посещающих ферму, вам сообщается время, когда она прибывает к воротам и количество времени, которое её требуется для ответов на вопросы. В каждый момент времени только одна корова опрашивается, поэтому, если много коров прибывает примерно в одно и то же время, они должны ждать своей очереди отвечать на вопросы. Например, если корова прибыла во время 5 и отвечает на вопросы 7 единиц времени, то другая корова, прибывшая во время 8 должна подождать до времени 12, что начать отвечать на вопросы.

Определите минимально возможное время, за которое все коровы войдут на ферму.

ФОРМАТ ВВОДА (файл cowqueue.in):

Первая строка ввода содержит \(N\), положительное целое число, не более 100. Каждая из последующих \(N\) строк описывает одну корову, задавая время прибытия и время, которое требуется ей для ответов на вопросы. Каждое из этих чисел - положительное целое число не более 1,000,000.

ФОРМАТ ВЫВОДА (файл cowqueue.out):

Определите минимально возможное время, в которое все коровы завершат обработку.

Circular Barn

Задачи на моделирование

Будучи фанатом современной архитектуры, Фермер Джон построил новый амбар в форме круга. Внутри амбар составляет кольцо из \(n\) комнат, пронумерованных по часовой стрелке \(1 \ldots n\) по периметру (\(3 \leq n \leq 1,000\)). Каждая комната имеет двери в две соседние комнаты, а также дверь из амбара во внешний мир.

ФД хочет разместить ровно \(r_i\) а каждой комнате \(i\) (\(1 \leq r_i \leq 100\)). Чтобы загонять коров в амбар он планирует открывать внешнюю дверь в одну из комнат, позволяя всем коровам зайти через эту дверь. Каждая из коров затем идёт по часовой стрелке через все комнаты пока не добредёт до своей. ФД хочет открыть такую внешнюю дверь, чтобы все коровы вместе прошли минимальное суммарное расстояние. Определите это минимальное суммарное расстояние, если ФД выберет дверь для открывания оптимальным образом. Расстояние, которое проходит одна корова, равно количеству внутренних дверей, через которые она прошла.

ФОРМАТ ВВОДА (файл cbarn.in):

Первая строка ввода содержит \(n\). Оставшиеся \(n\) строк содержат \(r_1 \ldots r_n\).

ФОРМАТ ВЫВОДА (файл cbarn.out):

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

Hoof, Paper, Scissors

Префиксные суммы(минимумы, ...) Задачи на моделирование

Возможно Вы слышали об игре "Камень, Бумага, Ножницы". Коровы любят играть в похожую игру "Копыто, Бумага, Ножницы" Правила игры "Копыто, Бумага, Ножницы" просты. Две коровы играют друг против друга. Они обе считают до трёх, а затем одновременно делают жест, представляющий копыто, бумагу или ножницы. Копыто выигрывает у ножниц, ножницы выигрывают у бумаги, бумага выигрывает у копыта. Конечно может быть и ничья, если обе коровы сделали один и тот же жест.

Фермер Джон хочет сыграть с Бесси \(N\) раз (\(1 \leq N \leq 100,000\)). Бесси будучи экспертом в этой игре может предсказать каждый из жестов ФД. Но как корова, она очень ленива. Поэтому она хочет играть одним и тем же жестом переключившись на другой не более одного раза за все игры. Например, она может играть "Копыто" первые \(x\) игр, и затем переключится на "бумагу" на оставшиеся \(N-x\) игр.

По заданной последовательности жестов ФД, определите максимальное количество игр, которое выиграет Бесси.

ФОРМАТ ВВОДА (файл hps.in):

Первая строка ввода содержит число \(N\).

Оставшиеся \(N\) строк содержат жесты ФД, представленные символами H, P, S.

ФОРМАТ ВЫВОДА (файл hps.out):

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

Angry Cows

Бинарный поиск по ответу Жадный алгоритм Задачи на моделирование

Беси создала новую игру. Игрок стреляет коровами на одномерную сцену, состоящую из множества стогов сена расположенных в различных точках на числовой прямой. Каждая корова приземляется с силой достаточной, чтобы разрушить ближайшие к точке приземления стоги. Цель - использовать множество коров так, чтобы разрушить все стоги сена.

Имеется \(N\) стогов сена расположенных в целочисленных позициях \(x_1, x_2, \ldots, x_N\) на числовой прямой. Если корова приземляется с энергией \(R\) в позиции \(x\), это вызывает взрыв "радиуса \(R\)", разрушающий все стоги сена в диапазоне \(x-R \ldots x+R\).

Всего имеется \(K\) коров для выстрелов, каждая с одной и той же энергией \(R\). Определите минимальную целую величину \(R\) такую, что возможно используя эти \(K\) коров разрушить все стоги сена на сцене.

ФОРМАТ ВВОДА (файл angry.in):

Первая строка ввода содержит \(N\) (\(1 \leq N \leq 50,000\)) и \(K\) (\(1 \leq K \leq 10\)). Каждая из оставшихся \(N\) строк содержит целые числа \(x_1 \ldots x_N\) (каждое в интервале \(0 \ldots 1,000,000,000\)).

ФОРМАТ ВЫВОДА (файл angry.out):

Выведите минимальную энергию \(R\), с которой должна приземлиться каждая корова, для того чтобы разрушить все стоги сена.

Fort Moo

Префиксные суммы(минимумы, ...) Задачи на моделирование

Беси строит форт прямоугольной формы.

Она уже выбрала место - кусок земли \(N\) метров по \(M\) метров (\(1 \leq N, M \leq 200\)). К несчастью, на этом месте есть болотистые участки, на которых строительство невозможно. Помогите Беси определить наибольшую (по площади) область, на которой можно построить форт, так , чтобы форт не проходил через болотистые участки.

ФОРМАТ ВВОДА (файл fortmoo.in):

Строка 1 содержит целые числа \(N\) и \(M\).

Следующие \(N\) строк содержат по \(M\) символов, формируя решётку, описывающую выбранное место. Символ '.' представляет траву, а символ 'X' представляет болотистую местность.

ФОРМАТ ВЫВОДА (файл fortmoo.out):

Единственное целое число, представляющее максимальную площадь, которую Беси может покрыть своим фортом.

Mowing the Field

Задачи на моделирование

Фермер Джон косит траву.

Ферма представлена двумерной решёткой квадратных ячеек. AL начинает одной из этих ячеек в момент времени \(t = 0\), косит траву в этой ячейке. Поэтому изначально трава выкошена только в этой ячейке. Дальнейшие действия ФД описываются последовательностью из \(N\) предложений. Например, если первое предложение "W 10" то для моментов времени от \(t = 1\) до \(t = 10\) (то есть, следующие 10 единиц времени), ФД будет продвигаться по 1 ячейке на запад, кося траву в каждой ячейке по пути.

ФД медленно косит траву настолько, что она может успеть вырасти ещё прежде чем он закончит процесс. Любая ячейка травы, которую выкосили в момент времени \(t\) вырастет снова в момент времени \(t + x\).

В соответствии с последовательностью команд ФД может посещать некоторые ячейки по многу раз, но он не хочет посещать ячейки, в которых трава уже пострижена. То есть, каждый раз, когда он посещает ячейки, его предыдущий визит в эту ячейку должен быть не менее чем на \(x\) единиц времени раньше, для того, чтобы выкошенная в этой ячейке трава смогла вновь вырасти.

Пожалуйста, определите максимальное значение \(x\), при котором будет выполняться пожелание ФД.

ФОРМАТ ВВОДА (файл mowing.in):

Первая строка ввода содержит \(N\) (\(1 \leq N \leq 100\)). Каждая из оставшихся \(N\) строк содержит одно предложение вида 'D S', где D это символ направления, (N=север, E=восток, S=юг, W=запад), а S - количество шагов, выполненных в этом направлении (\(1 \leq S \leq 10\)).

ФОРМАТ ВВОДА (файл mowing.out):

Пожалуйста, определите максимальное значение \(x\) такое, что ФД никогда не ступит на ячейку, где трава ещё не выросла. Если ФД никогда не заходит в ячейку повторно, выведите -1.

Cow Routing

реализация Задачи на моделирование

Устав от холодной зимы Беси планирует слетать куда потеплее на каникулах.
К несчастью, только одна кампания Air Bovinia продаёт билеты коровам.

Air Bovinia имеет N самолётов (1 <= N <= 500), каждый из которых
летает по собственному маршруту, состоящему из
двух или более городов. Например, такому: маршрут
начинается в городе 1, затем самолёт летит в город 5,
затем в город 2, затем в город 8. Никакой город не появляется
в этом маршруте дважды и более раз. Если Беси
выбрала маршрут, то она может сесть на него в любом городе
этого маршрута и сойти также в любом городе этого маршрута.
Она не обязана садиться в самолёт в первом городе маршрута
и выходить в последнем. Каждый маршрут имеет определённую цену,
которую Беси должна заплатить, если она использует
любую часть маршрута, не зависящую от количества городов,
которые она посетит во время маршрута.

Беси хочет найти самый дешёвый способ пропутешествовать от её фермы
(город A) до её "тёплого местечка" (город B).
При этом она хочет использовать только один маршрут,
чтобы не мучиться с пересадками.
Помогите ей определить минимальную цену, которую ей придётся заплатить.

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

Первая строка содержит числа A,B,N разделённые одиночными пробелами.

Следующие 2N строк описывают доступные маршруты - по две строки на маршрут.

Первая строка содержит цену этого маршрута (целое число от 1 до 1000)
и количество городов, вдоль этого маршрута (целое число от 1 до 500).

Вторая строка содержит список городов в порядке посещения вдоль этого
маршрута. Каждый город идентифицируется целым числом от 1 до 10,000.

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

Выведите минимальную стоимость одного маршрута, который Беси
может использовать для перемещения из города A в город B.
Если такого маршрута нет, выведите -1.

Примечание

Хотя имеется более дешёвый решение из двух маршрутов (маршрут 2
из города 1 в город 3, затем маршрут 1 из города 3 в город 2),
Беси выбирает только прямой маршрут
- маршрут 3, цена которого равна 8.

Square Pasture

Элементарная геометрия Задачи на моделирование

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

Помогите ФД вычислить минимальную площадь, которую станет занимать его новое пастбище (покрывающее два исходных прямоугольника).

ФОРМАТ ВВОДА (файл square.in):

Первая строка входного файла описывает одно из оригинальных прямоугольных пастбищ четырьмя целыми числами, разделённых одиночными пробелами \(x_1\) \(y_1\) \(x_2\) \(y_2\) (все числа в диапазоне \(0 \ldots 10\)). Левый нижний угол пастбища – точка \((x_1, y_1)\), правый верхний угол – точка \((x_2, y_2)\), причём \(x_2 > x_1\) и \(y_2 > y_1\).

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

ФОРМАТ ВЫВОДА (файл square.out):

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

Speeding Ticket

Задачи на моделирование

Беси, которая всегда создаёт проблемы, украла трактор Фермера Джона и помчалась вниз по дороге!

Дорога имеет длину ровно 100 миль и Беси едет по ней, пока её не остановит офицер полиции и не вручит ей квитанцию о превышении скорости.

Дорога поделена на \(N\) участков, каждый описывается положительной длиной в милях, а также целым числом - пределом скорости на этом участке, в диапазоне \(1 \ldots 100\) миль в час. Поскольку длина дороги 100 миль, суммарная длина всех \(N\) участков равна 100. Например, дорога может начаться участком в 45 миль со скоростным пределом 70 миль в час, и затем будет участок в 55 миль, со скоростным пределом 60 миль в час.

Движение Беси тоже может быть описано серией участков - \(M\) штук. На каждом участке она проезжает определённое количество миль с определённой целочисленной скоростью. Например, она может ехать 50 миль со скоростью 65, а затем 50 миль со скоростью 55. Суммарная длина всех этих \(M\) участков также равна 100. Трактор ФД может двигаться со скоростью не более 100 миль в час.

По заданной выше информации, определите максимальное превышение скорости, которое допустила Беси во время путешествия.

Формат ввода (файл speeding.in):

Первая строка ввода содержит \(N\) и \(M\), разделённые одним пробелом.

Каждая из следующих \(N\) строк содержит два целых числа, описывающих участок дороги: задавая его длину и предел скорости

Каждая из следующих \(M\) строк содержит два целых числа, описывающих участок путешествия Беси: задавая его длину и скорость, на которой двигалась Беси.

Формат вывода (файл speeding.out):

Выведите одну строку, содержащую максимальное превышение предела скорости, которое допустила Беси. Если она никогда не превысила скорость, выведите 0.

High Card Wins

Жадный алгоритм Использование сортировки Задачи на моделирование

Корова Беси - фанат карточных игр. Однако у неё нет достойных противников. Все они играют в полностью предсказуемой манере. Однако надо ещё придумать, как выиграть у них.

Беси и Эльза играют в простую карточную игру, в которой имеется колода из \(2N\) карт, последовательно пронумерованных \(1 \ldots 2N\). Они делят её поровну - \(N\) карт Беси и \(N\) карт Эльзе. Затем они играют \(N\) раундов, в каждом из которых Беси и Эльза выкладывают по одной карте, и тот, у кого карта больше, зарабатывает очко.

Беси может предсказать порядок, в котором будет выкладывать карты Эльза. Определите максимальное количество очков, которое может выиграть Беси.

ФОРМАТ ВВОДА (файл highcard.in):

Первая строка ввода содержит значение N (\(1 \leq N \leq 50,000\)).

Следующие N строк содержат карты, которыми будет играть в каждом из последующих раундов игры. Заметим, что из этой информации легко определить карты, которые на руках у Беси.

ФОРМАТ ВЫВОДА (файл highcard.out):

Выведите в одной строке максимальное количество очков, которое может заработать Беси.

Speeding Ticket

Задачи на моделирование

Беси, которая всегда создаёт проблемы, украла трактор Фермера Джона и помчалась вниз по дороге!

Дорога имеет длину ровно 100 миль и Беси едет по ней, пока её не остановит офицер полиции и не вручит ей квитанцию о превышении скорости.

Дорога поделена на \(N\) участков, каждый описывается положительной длиной в милях, а также целым числом - пределом скорости на этом участке, в диапазоне \(1 \ldots 100\) миль в час. Поскольку длина дороги 100 миль, суммарная длина всех \(N\) участков равна 100. Например, дорога может начаться участком в 45 миль со скоростным пределом 70 миль в час, и затем будет участок в 55 миль, со скоростным пределом 60 миль в час.

Движение Беси тоже может быть описано серией участков - \(M\) штук. На каждом участке она проезжает определённое количество миль с определённой целочисленной скоростью. Например, она может ехать 50 миль со скоростью 65, а затем 50 миль со скоростью 55. Суммарная длина всех этих \(M\) участков также равна 100. Трактор ФД может двигаться со скоростью не более 100 миль в час.

По заданной выше информации, определите максимальное превышение скорости, которое допустила Беси во время путешествия.

Формат ввода (файл speeding.in):

Первая строка ввода содержит \(N\) и \(M\), разделённые одним пробелом.

Каждая из следующих \(N\) строк содержит два целых числа, описывающих участок дороги: задавая его длину и предел скорости

Каждая из следующих \(M\) строк содержит два целых числа, описывающих участок путешествия Беси: задавая его длину и скорость, на которой двигалась Беси.

Формат вывода (файл speeding.out):

Выведите одну строку, содержащую максимальное превышение предела скорости, которое допустила Беси. Если она никогда не превысила скорость, выведите 0.

Astral Superposition

Задачи на моделирование

**Замечание: Время на тест в этой задаче 4 сек, в 2 раза больше, чем по умолчанию.**

Беси использует свой изящный телескоп чтобы сделать фотографии всех звёзд на ночном небе. Её телескоп может сделать фото \(N \times N\) (\(1 \leq N \leq 1000\)) пикселов, где каждый пиксел это или звезда, или пустое небо. Каждая звезда будет представлена ровно одним пикселом, и никакие две звезды на разделяют один и тот же пиксел.

Ночью происходит что-то странное со звёздами на небе. Каждая звезда или исчезает или перемещается на \(A\) пикселов вправо и на \(B\) пикселов вниз (\(0 \leq A,B \leq N\)). Если звезда исчезает или перемещается за границу фото, она больше не появляется на втором фото.

Беси делает фотографии до и после перемещений, но после экспериментов, она случайно наложила одну фотографию на другую. Теперь она видит белые пикселы, которые были пустыми на обеих фотографиях, серые пикселы, где звезда была ровно на одном фото и чёрные пикселы, где была звезда на обоих фотографиях. Беси также помнит, что на второй фотографии не появились новые звёзды, поэтому первая фотография содержит все звёзды ночного неба. Если не существует исходного положения звёзд, которое может произвести финальное фото, выведите \(-1\).

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка ввода содержит \(T\), далее следуют \(T\) подтестов.

Первая строка каждого подтеста содержит \(N\) \(A\) \(B\).

Далее следуют \(N\) строк, каждая из которых представляет одну строку наложенных фотографий. \(i\)-ая строка представлена строкой \(c_{i,1}c_{i,2}\dots c_{i,N}\), где каждый \(c_{i,j} \in \{W,G,B\}\), представляющих белый, серый и чёрный цвет соответственно.

Гарантируется, что сумма \(N^2\) для всех подтестов не превысит \(10^7\).

ФОРМАТ ВЫВОДА (на экран / stdout):

Для каждого подтеста выведите минимальное количество звёзд, которые существовали до сдвига или \(-1\) если это невозможно определить.

Reflection

Задачи на моделирование

п»ї

У Фермера Джона есть квадратный холст, представленный решёткой из \(N\) * \(N\) ячеек, (\(2 \leq N \leq 2000\), \(N\) чётное). Он рисует по следующим правилам:

  1. Сначала он делит холст на четыре равных квадранта, разделённых горизонтальными и вертикальными линиями через центр холста.
  2. Далее он рисует любимую картинку в правом верхнем квадранте холста. Каждая ячейка верхнего правого квадранта или закрашена (представлено символом '#') или не закрашена (представлено символом '.').
  3. Наконец, гордясь своим рисунком, он отражает его через ранее указанные вертикальные и горизонтальные линии в другие квадранты холста.

Например, предположим \(N=8\) и ФД нарисовал следующую картинку в правом верхнем квадранте на шаге 2:

.#..
.#..
.##.
....

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

..#..#..
..#..#..
.##..##.
........
........
.##..##.
..#..#..
..#..#..

Однако, пока ФД спал, Беси пробралась в его амбар и украла холст. А затем занялась вандализмом: Она стерла некоторые ячейки и закрасила некоторые другие ячейки. После чего вернула холст ФД.

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

Вам задан холст после вандализма Беси, а также последовательность \(U\) (\(0\le U \leq 10^5\)) модификаций холста, каждое переключает ячейку в '.', если в ней была '#' и наоборот. Прежде каждого обновления и после каждого обновления выведите минимальное количество операций \(x\), которое требуется выполнить, чтобы отражение было удовлетворено.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит целые числа \(N\) и \(U\).

Каждая из последующих \(N\) строк содержит \(N\) символов, представляющих холст после вандализма Беси. Каждый символ или '#', или '.'.

Каждая из последующих \(U\) строк содержит \(r\) и \(c\), где \(1 \leq r, c \leq N\), представляющих обновление ячейки в \(r\)-ой строке сверху и \(c\)-ой колонке слева.

ФОРМАТ ВЫВОДА (на экран / stdout):

Выведите \(U+1\) представляющую \(x\) до и после каждого обновления.

ПР�МЕР ВВОДА:

4 5
..#.
##.#
####
..##
1 3
2 3
4 3
4 4
4 4

ПР�МЕР ВЫВОДА:

4
3
2
1
0
1

Следующий холст удовлетворяет условию отражения и отличается от оригинального холста на 4 операции:

....
####
####
....

Невозможно сделать исходный холст удовлетворяющим условию отражения испольуя менее чем 4 операции.

После обновления \((1, 3)\), холст выглядит так:

....
##.#
####
..##

Требуется 3 операции, чтобы холст стал удовлетворять условию отражения.

После обновления \((2, 3)\), холст выглядит так:

....
####
####
..##

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

ОЦЕН�ВАН�Е:

  • Тесты 2-3: \(N \le 4\)
  • Тесты 4-6: \(U \le 10\)
  • Тесты 7-16: Нет дополнительных ограничений.

Автор: Chongtian Ma

Cowmpetency

Жадный алгоритм Задачи на моделирование Задача на реализацию

Фермер Джон нанимает нового вожака стада для своих коров. Для этого он интервьюирует \(N\) (\(2 \leq N \leq 10^5\)) коров на эту позицию. После интервью \(i\)-го кандидата он назначает целое число "уровень компетенции" \(c_i\) от \(1\) дo \(C\) включительно (\(1 \leq C \leq 10^9\)).

Поскольку ФД интервьюировал много коров, он не помнит все \(c_i\). Однако он помнит \(Q\) (\(1 \leq Q < N\)) пар чисел \((a_j, h_j)\) где корова \(h_j\) компетенция которой была строго больше, чем уровень компетенции коров от \(1\) до \(a_j\) (\(1 \leq a_j < h_j \leq N\)).

ФД говорит Вам последовательность \(c_1, \dots, c_N\) (где \(c_i = 0\) означает, что он забыл уровень компетенции коровы \(i\), и \(Q\) пар \((a_j, h_j)\). Помогите ему определить лексикографически минимальную последовательность уровней компетенции, соответствующую этой информации или указать, что такой последовательности не существует. Последовательность чисел называется лексикографически меньше другой последовательности если в ней меньшее число не первой позиции, где эти последовательности различаются.

Каждый ввод содержит \(T\) \((1 \leq T \leq 20)\) независимых подтестов. Гарантируется, что сумма \(N\) по всем подтестам не превысит \(3 \cdot 10^5\).

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(T\), количество независимых подтестов. Каждый подтест описывается так:
  1. Первая строка содержит \(N\), \(Q\), \(C\).
  2. Следующая строка содержит c1, \dots, cN\( \)(0 \leq ci \leq C)$.
  3. Каждая из последующих \(Q\) строк содержит пару \((a_j, h_j)\). Гарантируется что все \(a_j\) в текущем подтесте различны.

ОРМАТ ВЫВОДА (на экран / stdout):

Для каждого подтеста выведите одну строку содержащую лексикографически минимальную последовательность уровней компетенции, соответствующую информации, которую помнит ФД, или \(-1\), если такой последовательности не существует.

Walking in Manhattan

Задачи на моделирование

п»ї

Фермер Джон и его \(Q\) (\(1 \leq Q \leq 2 \cdot 10^5\)) коров на Манхеттене. Коровы сбежали и гуляют по городу. В Манхеттене \(N\) (\(1 \le N \le 2 \cdot 10^5\)) дорог проходящие бесконечно на \(x\)-\(y\)-плоскости. Все они расположены или горизонтально, или вертикально. Каждая горизонтальная или вертикальная может быть смоделирована уравнением вида \(y = c_i\) или \(x = c_i\), где \(c_i\) целое число в интервале от \(0\) до \(10^9\) включительно.

ФД знает точно где каждая корова начала путешествие и время путешествия. Каждая из коров движется по следующему шаблону:

  • РћРЅР° двигается РЅР° север (\(+y\)) или восток (\(+x\)) РЅР° РѕРґРЅСѓ единицу РІ секунду.
  • Если РѕРЅР° РЅР° одиночной РґРѕСЂРѕРіРµ, РѕРЅР° продолжает двигаться РїРѕ ней.
  • Если РѕРЅР° РЅР° пересечении РґРІСѓС… РґРѕСЂРѕРі, РѕРЅР° идёт РЅР° север, РЅР° чётной секунде путешествия Рё РЅР° восток иначе.

ВАм дана карта Манхэттена и информация о каждой корове, помогите ФД где его коровы сейчас.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка ввода содержит \(N\) и \(Q\).

Следующие \(N\) строк описывают дороги. Каждая дорога описывается направлением (H или V) координатой \(c_i\). Гарантируется, что каждая дорога уникальна.

Следующие \(Q\) строк описывают коров. Каждая корова описывается тремя целыми числами \((x_i, y_i, d_i)\), означающими, что она начала путешествие из позиции \((x_i, y_i)\) ровно \(d_i\) секунд назад. Гарантируется, что \((x_i, y_i)\) лежит на некоторой дороге, и \(0 \le x_i, y_i, d_i \le 10^9\).

ФОРМАТ ВЫВОДА (на экран / stdout):

Выведите \(Q\) строк, где \(i\)-ая строка содержит текущую позицию i-ой коровы.

ПР�МЕР ВВОДА:

4 5
V 7
H 4
H 5
V 6
6 3 10
6 4 10
6 5 10
6 6 10
100 4 10

ПР�МЕР ВЫВОДА:

14 5
7 13
6 15
6 16
110 4
Первые две коровы прошли следующий путь:

(6, 3) -> (6, 4) -> (7, 4) -> (7, 5) -> (8, 5) -> ... -> (14, 5)
(6, 4) -> (6, 5) -> (7, 5) -> (7, 6) -> ... -> (7, 13)

ОЦЕН�ВАН�Е:

  • Тесты 2-4 : \(N, Q, c_i, x_i, y_i, d_i \leq 100\).
  • Тесты 5-9 : \(N, Q\le 3000\).
  • Тесты 10-20 : Нет дополнительных ограничений.

Автор: Benjamin Qi

Nap Sort

Жадный алгоритм Задачи на моделирование

Беси сортирует массив целых чисел собственным алгоритмом. У неё есть куча из \(N\) \((1 \leq N \leq 2\cdot 10^5)\) целых чисел \(a_1,a_2,\dots,a_N\) \((1 \leq a_i \leq 10^{11})\), которые она хочет перенести в другой массив в отсортированном порядке. Она постоянно ищет минимальный элемент в куче, удаляет его и добавляет в конец массива. Беси требуется \(p\) секунд, чтобы найти минимальный элемент в куче из \(p\) целых чисел.

ФД выделил Беси в помощь неограниченное количество коров. Беси использует их следующим образом. Она разделила все свои целые числа на две кучи: куча Беси и куча Помощниц. Для каждого числа в своей куче она выполняет алгоритм как обычно. Для каждого целого числа в куче Помощниц Беси назначает его отдельной корове. И предлагает ей поступать так. Когда корова помощница получает число \(a_i\), она должна подождать \(a_i\) секунд и затем добавить это число в конец массива. Если Беси и корова-помощница добавляют число в одно и то же время, то сначала добавляется число Беси. Если нескольким коровам-помощницам было дано одно и то же число, они добавляют копии этого числа в одно и то же время.

Помогите Беси поделить её числа так, чтобы финальный массив был отсортирован, а время сортировки было минимально.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит число \(T\), количество независимых подтестов. (\(1\le T\le 10\)).

Каждый подтест имеет такую структуру:

Первая строка содержит \(N\) - количество целых чисел в массиве Беси.

Следующая строка содержит \(a_1, a_2, \dots, a_N\), - целые числа, которые сортирует Беси. Некоторые целые числа могут появится множество раз.

Гарантируется, что сумма всех \(N\) по всем подтестам не превысит \(2\cdot 10^5\).

ФОРМАТ ВЫВОДА (на экран / stdout):

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

Majority Opinion

Жадный алгоритм реализация Задачи на моделирование

У Фермера Джона важная задача - решить какой тип сена купить для своих коров.

У Фермера Джона есть \(N\) коров (\(2 \le N \le 10^5\)) пронумерованных от \(1\) до \(N\). Каждая корова любит ровно один тип сена \(h_i\) (\(1 \le h_i \le N\)). ФД хочет, чтобы все его коровы любили один тип сена.

Чтобы это случилось, ФД может сформировать фокус-группы. Фокус-группа состоит из всех коров в непрерывном интервале от \(i\) до \(j\), включительно. Если в фокус-группе более половины коров любит один и тот же некоторый тип сена, то все коровы начинают любить этот тип сена, иначе ни у одной коровы не изменяется любимый тип сена. Например, если фокус группа состоит из 16 коров, 9 или более из которых любят один и тот же тип сена, то и остальные 7 коров теперь будут любить этот же тип сена.

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

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Сначала идёт одно целое число \(T\), которое обозначает количество независимых тестов \((1 \leq T \leq 10)\).

Первая строка каждого теста содержит число \(N\).

Вторая строка каждого теста состоит из \(N\) целых чисел, любимых типов сена \(h_i\), в порядке номеров коров.

Гарантируется, что сумма \(N\) во всех тестах не превысит \(2\cdot 10^5\).

ФОРМАТ ВЫВОДА (на экран / stdout):

Выведите \(T\) строк, по одной для каждого теста.

Если возможно сделать, чтобы все коровы полюбили один и тот же тип сена, выведите все такие возможные типы сена в порядке возрастания. Иначе, выведите \(-1\). Когда выводите список чисел, выводите соседние числа через один пробел, и в конце этой строки не должно быть пробелов.

Cannonball

Задачи на моделирование

Беси прыгает вдоль числовой прямой длины \(N\) \((1 \leq N \leq 10^5)\) по позициям \(1,2,\dots,N\) слева направо. Она начинает в позиции \(S\) \((1 \leq S \leq N)\) прыжком вправо со стартовой энергией \(1\). Если энергия Беси равна \(k\), то её следующий прыжок будет на \(k\) единиц вперёд от её текущей позиции.

Каждая целочисленная позиция от \(1\) до \(N\) это или цель, или прыжковая площадка. Каждая цель или прыжковая площадка имеет целочисленную величину от \(0\) до \(N\) включительно. Прыжковая площадка со значением \(v\) увеличивает энергию Беси на \(v\) и изменяет на противоположное направление прыжков. Цель со значением \(v\) будет сломана, если на неё приземлится Беси с энергией не менее \(v\). Приземление на цель не изменяет энергию и направление Беси. Сломанная цель остаётся сломанной, но Беси может на неё прыгать, энергия и направление не меняются.

Если Беси будет прыгать бесконечное количество времени или до тех пор, пока Беси покинет этот отрезок прямой, сколько целей она сломает?

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

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка ввода содержит \(N\) и \(S\), где \(N\) - это длина числовой прямой, а \(S\) - стартовая позиция Беси.

Каждая из последующих \(N\) строк описывает каждую цель/прыжковую площадку. \(i\)-ая из этих строк содержит целые числа \(q_i\) и \(v_i\), где \(q_i = 0\) если положение \(i\) это прыжковая площадка \(q_i = 1\) если положение \(i\) это - цель, и где \(v_i\) это величина v в положении \(i\).

ФОРМАТ ВЫВОДА (на экран / stdout):

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

Milk Exchange

Задачи на моделирование

\(N\) \((1 \leq N \leq 5 \cdot 10^5)\) коров Фермера Джона выстроены в круг. \(i\)-ая корова имеет ведро с целой вместимостью \(a_i\) \((1 \leq a_i \leq 10^9)\) литров. Все вёдра изначально полные.

Каждую минуту корова \(i\) передаёт всё молоко из своего ведра корове \(i+1\) для \(1\le i<N\), а корова \(N\) передаёт своё молоко корове \(1\). Все обмены проходят одновременно (то есть, если корова отдаёт \(x\) литров молока и также получает \(x\) литров молока, её количество молока не изменяется). Если количество молока у коровы \(i\) превысит значение \(a_i\), тогда лишнее молоко теряется.

После каждой из минут \(1, 2, \dots, N\) - сколько молока останется у всех коров вместе?

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(N\).

Следующая строка содержит целые числа \(a_1,a_2,...,a_N\).

ФОРМАТ ВЫВОДА (на экран / stdout):

Выведите \(N\) строк, где \(i\)-ая строка указывает сколько молока останется у всех коров вместе после \(i\) минут.

Cowdependence

жадные алгоритмы Задачи на моделирование

\(N\) \((1 \leq N \leq 10^5)\) коров Фермера Джона выстроены в ряд. \(i\)-ая корова имеет метку \(a_i\) (\(1 \leq a_i \leq N\)). Группа коров может сформировать дружескую группу, если все они имеют одну и ту же метку и каждая корова находится в пределах \(x\) коров от остальных коров группы, где \(x\) - целое число из интервала \([1,N]\). Каждая корова должна быть точно в одной дружеской группе.

Для каждого \(x\) от \(1\) до \(N\), посчитайте минимальное количество дружеских групп, которые могу быть сформированы.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит целое число \(N\).

Следующая строка содержит \(a_1 ... a_N\), метки каждой из коров.

ФОРМАТ ВЫВОДА (на экран / stdout):

Для каждого \(x\) от \(1\) до \(N\), выведите минимальное количество дружеских групп для каждого \(x\) в отдельной строке.

Rotate and Shift

Задачи на моделирование

**Примечание. Ограничение по времени для этой задачи – 4 секунды, что в 2 раза больше, чем по умолчанию.**

Чтобы отпраздновать начало весны, \(N\) коров фермера Джона (\(1 \leq N \leq 2 \cdot 10^5\)) придумали новый интригующий танец, в котором они встают в круг и перестраиваются предсказуемыv способом.

В частности, по кругу есть \(N\) позиций, пронумерованные последовательно от \(0\) до \(N-1\), причем позиция \(0\) следует за позицией \(N-1\). На каждой позиции находится корова. Коровы также последовательно нумеруются от \(0\) до \(N-1\). Изначально корова \(i\) находится в позиции \(i\). Вам сообщают набор из \(K\) позиций \(0=A_1<A_2< \ldots< A_K<N\), которые являются «активными», что означает, что коровы в этих позициях будут двигаться следующими (\(1 \leq K \leq N\)).

В каждую минуту танца происходят две вещи. Во-первых, коровы в активных позициях меняются: корова в позиции \(A_1\) перемещается в позицию \(A_2\), корова в позиции \(A_2\) перемещается в позицию \(A_3\) и так далее, с коровой в позиции \(A_K\) переход на позицию \(A_1\). Все эти \(K\) перемещения происходят одновременно, поэтому после завершения вращения все активные позиции по-прежнему содержат ровно одну корову. Далее смещаются сами активные позиции: \(A_1\) становится \(A_1+1\), \(A_2\) становится \(A_2+1\) и так далее (если \(A_i = N-1\) для некоторой активной позиции, то \(A_i\) возвращается к \(0\)).

Рассчитайте порядок коров после \(T\) минут танца (\(1\le T\le 10^9\)).

ФОРМАТ ВВОДА (с терминала/стандартного ввода):

Первая строка содержит три целых числа \(N\), \(K\) и \(T\).

Вторая строка содержит \(K\) целых чисел, представляющих исходный набор активных позиций. \(A_1,A_2, \ldots A_K\). Напомним, что \(A_1 = 0\) и что они даны в порядке возрастания.

ФОРМАТ ВЫВОДА (на терминал / стандартный вывод):

Выведите порядок коров через \(T\) минут, начиная с коровы в позиции \(0\), разделенных одиночными пробелами.

FEB

Задачи на моделирование

<р> Бесси и Элси замышляют наконец свергнуть фермера Джона! Они планируют сделать \(N\) (\(1\le N\le 2\cdot 10^5\)) текстовых сообщений. �х разговор может быть представлен строкой \(S\) длины \(N\), где \(S_i\) равно \(B\) или \(E\), это означает, что \(i\)-е сообщение было отправлено Бесси или Элси соответственно.

Однако фермер Джон узнает о плане и пытается перехватить их беседу. Таким образом, некоторые буквы \(S\) равны \(F\), что означает, что фермер Джон запутал сообщение и отправитель неизвестен.

Уровень возбуждения незапутанной беседы – это количество повторных отправок коровы, то есть количество вхождений подстроки \(BB\) или \(EE\) в \(S\). Вы хотите найти уровень возбуждения исходного сообщения, но вы не знаете, какие из сообщений фермера Джона на самом деле были сообщениями Бесси. / Элси. По всем возможностям выведите все возможные уровни возбуждения \(S\).

ФОРМАТ ВВОДА (с клавиатуры/стандартного ввода):

Первая строка будет состоять из одного целого числа \(N\).

Следующая строка содержит \(S\).

ФОРМАТ ВЫВОДА (на экран / стандартный вывод):

Сначала выведите \(K\) — количество различных возможных уровней возбуждения. На следующем Строки \(K\) выведите уровни возбуждения в порядке возрастания.

ПР�МЕР ВВОДА:

4
BEEF

ПР�МЕР ВЫВОДА:

2
1
2

ПР�МЕР ВВОДА:

9
FEBFEBFEB

ПР�МЕР ВЫВОДА:

2
2
3

ПР�МЕР ВВОДА:

10
BFFFFFEBFE

ПР�МЕР ВЫВОДА:

3
2
4
6

ОЦЕН�ВАН�Е:

  • Р’ тестах 4–8: \(N\le 10\)
  • Р’ тестах 9–20: без дополнительных ограничений.

<СЂ>

Авторыы: William Yue and Claire Zhang

Following Directions

Задачи на моделирование

**Замечание: Время на тест в этой задаче 8s, в четыре раза больше чем по умолчанию.**

У Фермера Джона есть большое квадратное поле из \((N+1)\times (N+1)\) (\(1\le N\le 1500\)) ячеек. Пусть ячейка \((i, j)\) обозначает ячейку в \(i\)-ой строке сверху, и в \(j\)-ом столбце слева. В каждой ячейке \((i, j)\) живёт по одной корове (\(1 \le i, j \le N\)), и каждая ячейка содержит указатель или вправо или вниз. Также каждая ячейка \((i, j)\) такая, что \(i=N+1\) или \(j=N+1\), кроме \((N+1, N+1)\), содержит бак с коровьей едой. Каждый чан содержит еду различной цены. Чан в ячейке \((i, j)\) стоит \(c_{i, j}\) (\(1 \le c_{i,j} \le 500\)).

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

Чтобы поддержать свой бюджет, ФД хочет узнать общую стоимость еды съедаемой коровами каждый день. Однако, каждый день перед обедом корова в некоторой ячейке \((i, j)\) меняет направление указателя "вправо" на "вниз" или наоборот. Этот знак остаётся в таком направлении и в последующие дни, пока не будет перевёрнут обратно позже.

Вам даны координаты указателя, который меняется каждый день. Выведите стоимость каждого дня (всего \(Q\) дней, \(1 \le Q \le 1500\)).

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(N\) (\(1 \le N \le 1500\)).

Следующие \(N+1\) строк описывают построчно решётку сверху вниз - изначальное положение указателей стоимость \(c_{i, j}\) каждого чана. Первые \(N\) строк содержат по \(N\) символов R или D (указывающих направление вправо или вниз соответственно), затем следует цена \(c_{i, N+1}\). \((N+1)\)-я строка содержит \(N\) цен \(c_{N+1, j}\).

Следующая строка содержит \(Q\) (\(1 \le Q \le 1500\)).

Затем следуют \(Q\) дополнительных строк, каждая содержит по два целых числа. \(i\) и \(j\) (\(1 \le i, j \le N\)), которые представляют собой координаты ячеек, в которых меняется указатель в соответствующий день.

ФОРМАТ ВЫВОДА (на экран / stdout):

\(Q+1\) строк: значение изначальной суммарной цены, за которым следует значение суммарной цены после каждого изменения указателя.

Moo Operations

Задачи на моделирование

Фермер Джон дал Беси \(Q\) строк (\(1 \leq Q \leq 100\)), состоящих только из символов 'M' и 'O.' Любимое слов Беси "MOO", поэтому она хочет преобразовать каждую из этих строк в строку "MOO" используя следующие операции

  1. Заменить первый или последний символ на противоположный (то есть, 'M' на 'O', а 'O' на 'M' ).
  2. Удалить первый или последний символ.

Для каждой строки определите минимальное количество операций, необходимых чтобы сформировать 'MOO' или выведите '-1', если это невозможно.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка ввода содержит \(Q\).

Каждая из следующих \(Q\) строк ввода содержит строку из символов 'M' или 'O'. Каждая строка имеет длину от 1 до 100 символов.

ФОРМАТ ВЫВОДА (на экран / stdout):

Выведите ответ для каждой входной строки на отдельной строке.

Leaders

жадные алгоритмы Задачи на моделирование

У Фермера Джона есть \(N\) коров (\(2 \leq N \leq 10^5\)). Каждая корова имеет породу Guernsey или Holstein. Коровы стоят в ряд пронумерованные \(1 \ldots N\).

Каждая корова записала свой список коров. А именно, список коровы \(i\) содержит диапазон коров, начиная с неё самой (коровы \(i\)) и до коровы \(E_i\) (\(i \leq E_i \leq N\)) включительно.

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

Помогите ФД посчитать количество пар коров, которые могут быть лидерами. Гарантируется, что имеется, как минимум, одна возможная пара.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(N\).

Вторая строка содержит строку длиной \(N\), в который \(i\)-ый символ обозначает породу \(i\)-ой коровы (G для Guernsey и H для Holstein).

Третья строка содержит \(E_1 \dots E_N\).

ФОРМАТ ВЫВОДА (на экран / stdout):

Выведите количество возможных пар лидеров.

Stamp Grid

Перебор Задачи на моделирование Задача на реализацию

Штамп-живопись это раскрашивание чёрным и белым цветом холста размером \(N \times N\) ячеек, где определённые ячейки закрашиваются, а другие - нет. Этот холст может быть представлен массивом символов \(N\times N\) (\(1\le N\le 20\)). The \(i\)-ый вход \(j\)-ой колонки массива равен символу '*', если холст содержит чернила в этой ячейке и символ '.' в противном случае.

У Беси есть план рисунка, а Фермер Джон дал ей штамп размером \(K\times K\) (\(1\le K\le N\)) который она может использовать для закраски холста размером \(N \times N\). Беси может поворачивать штамп на \(90^{\circ}\) по часовой стрелке и применять его для закраски холста в любом месте, если штамп помещается целиком на холсте. Формально, Беси выбирает такие целые числа \(i,j\), что \(i \in [1,N-K+1]\) и \(j \in [1, N-K+1]\); и затем для каждого \((i',j')\) такого, что \(1 \le i', j' \le K\), ячейка холста \((i+i'-1, j+j'-1)\) закрашивается в чёрный цвет, если в штампе было чернило в позиции \((i', j')\). Беси может поворачивать свой штамп в любой момент между закрашиваниями. Если ячейку закрасили она остаётся закрашенной навсегда.

ФД интересно может ли Беси создать свой рисунок, используя его штамп. Для каждого из \(T\) (\(1 \le T \le 100\)) подтестов помогите ФД получить ответ.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка ввода содержит \(T\) - количество подтестов.

Каждый подтест начинается с целого числа \(N\), за которым следуют \(N\) строк, состоящих их символов '*' и '.', представляющих рисунок, который Беси хочет нарисовать. Следующая строка содержит число \(K\), за которым следует \(K\) строк, каждая из которых содержит символы '*' и '.', представляющих штамп ФД.

Последовательные подтесты разделены пустыми строками.

ФОРМАТ ВЫВОДА (на экран / stdout):

Для каждого подтеста выведите "YES" или "NO" на отдельной строке.

Hungry Cow

Задачи на моделирование

Беси - голодная корова. Каждый день на обед если есть пакеты сена в амбаре, она съедает ровно один пакет. Чтобы Беси не голодала, Фермер Джон присылает в некоторые дни некоторое количество пакетов с сеном, которые прибывают утром (до обеда). В частности в день \(d_i\), ФД присылает \(b_i\) пакетов сена (\(1\leq d_i \leq 10^{14}\), \(1 \leq b_i \leq 10^9\)).

Вычислите общее количество пакетов сена, которые съест Беси в течение \(T\) дней.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(N\) и \(T\) (\(1 \le N \le 10^5\), \(1 \le T \le 10^{14}\)).

Каждая из последующих \(N\) строк содержит \(d_i\) и \(b_i\). Гарантируется, что \(1\le d_1<d_2<\dots < d_N\le T\).

ФОРМАТ ВЫВОДА (на экран / stdout):

Выведите количество пакетов сена, которые съест Беси за первые \(T\) дней.

Для вывода ответа требуется использовать 64-битные целые (например "long long" in C/C++).

Train Scheduling

Жадный алгоритм Теория расписаний Задачи на моделирование

**Замечание: Ограничение по памяти для этой задачи 512MB, в два раза больше значения по умолчанию.**

Беси приняли на новую работу - диспетчером поездов. Имеется две железнодорожные станции \(A\) и \(B\). В связи с ограничением бюджета, эти станции соединены только одной дорогой. Если поезд отправляется от одной станции в момент времени \(t\), тогда он прибудет на другую станцию в момент времени \(t+T\) (\(1\le T\le 10^{12}\)).

Имеется \(N\) (\(1\le N\le 5000\)) поездов для которых нужно установить время отправки. \(i\)-ый поезд должен покинуть станцию \(s_i\) в момент времени $ti или позже (\(s_i\in \{A, B\}, 0\le t_i\le 10^{12}\)). Запрещено иметь поезда, которые движутся в противоположных направлениях в один и тот же момент времени (поскольку они столкнутся). Однако разрешено иметь множество поездов, которые еду в одном направлении в одно и то же время (предполагаем, что поезда имеют пренебрежимо малые размеры)

Помогите Беси спланрировать времена отправления так, чтобы не было столкновений, а общая задержка была минимальной. Если поезд спланирован на убытие в момент времени \(a_i\ge t_i\), общая задержка определяется как \(\sum_{i=1}^N(a_i-t_i)\).

ФОРМАТ ВВОДА (с клавиатуры):

Первая строка содержит \(N\) и \(T\).

Затем следуют \(N\) строк, где i-ая строка содержит станции \(s_i\) и время \(t_i\), соответствующие \(i\)-ому поезду.

ФОРМАТ ВЫВОДА (на экран):

Минимально возможная общая задержка всех корректных планирований.

Farmer John Actually Farms

Жадный алгоритм Задачи на моделирование Вывод формулы

Фермер Джон вырастил \(N\) (\(1 \leq N \leq 2\cdot 10^5\)) аспарагусов на своей ферме. Однако некоторые из этих растений имеют генетические отличия, поэтому некоторые растения растут быстрее чем другие. Изначальная высота \(i\)-го растения равна \(h_i\) дюймов и после каждого дня \(i\)-ое растение вырастает на \(a_i\) дюймов.

ФД любит некоторые растения больше чем другие, и он хочет, чтобы некоторые растения были выше чем другие. Он дал Вам массив различных целых чисел \(t_1,\dots,t_N\), содержащих все целые числа от \(0\) до \(N-1\) и хочет, чтобы \(i\)-ое растение имело ровно \(t_i\) растений, которые выше этого. Определите минимальное количество дней, чтобы требование ФД было удовлетворено или укажите, что это невозможно.

ФОРМАТ ВВОДА (с клавиатуры):

Первая строка состоит из целого числа \(T\), обозначающего количество независимых тестов \((1 \leq T \leq 10)\).

Первая строка каждого теста состоит из целого числа \(N\).

Вторая строка состоит из \(N\) целых чисел \(h_i\) \((1 \leq h_i \leq 10^9)\), обозначающих изначальную высоту \(i\)-го растения в дюймах.

Третья строка состоит из \(N\) целых чисел \(a_i\) \((1 \leq a_i \leq 10^9)\), обозначающих количество дюймов, на которые \(i\)-ое растение вырастает каждый день.

Четвёртая строка содержит \(N\) различных целых чисел \(t_i\), обозначающих массив, который ФД даст Вам.

Гарантируется, что сумма всех \(N\) по всем тестам не превысит \(2\cdot 10^5\).

ФОРМАТ ВЫВОДА (с клавиатуры):

Выведите \(T\) строк, ответ на каждый тест на отдельной строке. Если невозможно, выведите -1.

Заметим, что тесты этой задачи могут потребовать использования 64-битного целого типа (например, "long long" в C/C++).

Cowntact Tracing 2

Жадный алгоритм Задачи на моделирование

Фермер Джон выстроил в ряд свои \(N\) коров (\(1 \leq N \leq 3\cdot 10^5\)). К несчастью, стала распространяться болезнь.

Изначально некоторые коровы инфицированы. Каждую ночь инфицированная корова распространяет болезнь на коров соседних слева и справа, если они есть. Однажды инфицированная корова остаётся инфицированной.

После некоторого количества ночей ФД понял, что ситуация выходит из-под контроля поэтому он проверил своих коров, чтобы определить больных коров. Определите минимальное количество коров, которые могли быть больными в самом начале.

ФОРМАТ ВВОДА (с клавиатуры):

Первая строка содержит \(N\), количество коров ФД.

Следующая строка содержит \(N\)-символьную битовую строку из цифр \(1\) и \(0\) где \(1\) представляет инфицированную корову, а \(0\) представляет неинфицированную корову после некоторого количества ночей.

ФОРМАТ ВЫВОДА (на экран):

Выведите одно целое число: минимальное количество коров, с которых могла стартовать болезнь.

Candy Cane Feast

Жадный алгоритм Задачи на моделирование реализация

Коровы Фермера Джона любят конфетные трости. У ФД \(N\) коров с определённой начальной высотой. Он хочет скормить им \(M\) конфетных тростей, различной высоты (\(1\le N,M\le 2\cdot 10^5\)).

ФД планирует кормить коров конфетными тростями одну за одной в порядке, в котором они заданы на вводе. Чтобы кормить коров ФД вывешивает конфетные трости так, чтобы изначально они касались земли. Коровы выстраиваются одна за одной в порядке, как они заданы на входе. Каждая ест до своей высоты (потому что выше не достаёт). Трость остаётся на месте где она изначально была подвешена и не опускается к земле, даже после того как её нижняя часть съедена. Возможно, что когда подойдёт очередь некоторой коровы она ничего не сможет съест, если нижняя часть трости уже выше высоты этой коровы. После того как пройдёт очередь всех коров, они подрастают на высоту равную количеству единиц трости, которую съела корова, а ФД вывешивает новую конфетную трость и коровы повторяют процесс опять (корова 1 всегда начинает есть первой).

ФОРМАТ ВВОДА (с клавиатуры):

Первая строка содержит \(N\) и \(M\).

Следующая строка содержит начальные высоты \(N\) коров, каждая в интервале \([1,10^9]\).

Следующая строка содержит высоты \(M\) конфетных тростей, каждая в интервале \([1,10^9]\).

ФОРМАТ ВЫВОДА (на экран):

Финальные высоты каждой из \(N\) коров на отдельной строке.

Заметим, что значения, заданные в тестах могут потребовать использования 64-битного целого типа (например, "long long" в C/C++).

Counting Liars

Жадный алгоритм Префиксные суммы(минимумы, ...) Задачи на моделирование

Корова Беси прячется где-то на числовой прямой. Каждая из \(N\) (\(1\le N\le 1000\)) других коров Фермера Джона имеет информацию, которой она делится с ФД: \(i\)-ая корова говорит, что Беси прячется в некоторой точке меньше либо равной to \(p_i\), или больше либо равной \(p_i\), (\(0\le p_i\le 10^9\)).

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

ФОРМАТ ВВОДА (С КЛАВИАТУРЫ / stdin):

Первая строка содержит \(N\).

Каждая из следующих \(N\) строк содержит символ L или G, за которым следует целое число \(p_i\). L означает, что \(i\)-ая корова говорит, что Беси скрывается в позиции меньше либо равной \(p_i\), а G означает, что \(i\)-ая корова говорит, что Беси скрывается в позиции больше либо равной \(p_i\)

ФОРМАТ ВЫВОДА (на экран / stdout):

Минимальное количество коров, которые солгали.

Email Filing

Задачи на моделирование

Фермер Джон реорганизует свою электронную почту. Его экран выглядит как вертикальный список папок с левой стороны экрана и и вертикальный список писем с право стороны экрана. Имеется \(M\) папок, пронумерованных \(1 \ldots M\) (\(1 \le M \le 10^4)\). Его почта сейчас содержит \(N\) писем, пронумерованных \(1\ldots N\) (\(1 \le N \le 10^5\)); \(i\)-ое письмо необходимо переместить в папку \(f_i\) (\(1\le f_i\le M\)).

Экран ФД небольшой, поэтому он может видеть одновременно \(K\) (\(1\le K\le \min(N,M)\)) папок и \(K\) писем одновременно. Изначально, его экран показывает папки \(1 \ldots K\) слева и письма \(1 \ldots K\) справа. Для того чтобы увидеть другие папки и письма, он должен скроллить соответствующие списки. Например, если он проскроллит вниз на одну позицию в списке папок, он увидит папки \(2 \ldots K+1\), а если проскроллит ещё на одну позицию вниз, он увидит папки \(3 \ldots K+2\). Когда ФД переносит письмо в папку, оно исчезает из списка писем, и все нижние письма поднимаются на одну позицию вверх. Например, пусть на экране отображены письма \(1, 2, 3, 4, 5\) и ФД переносит письмо 3 в соответствующую папку, тогда видимая часть списка писем станет такой: \(1, 2, 4, 5, 6\). ФД может переносить письма только в назначенные им папки.

К несчастью, колесо скроллинга на мышке ФД сломалось, и он может скроллить только вниз и не может скроллить вверх. Единственное подобие скроллинга вверх если он видит последние \(K\) писем из своего списка и переносит в папку одно из них. В этом случае после переноса список опять покажет последние \(K\) ещё не разнесенных писем, что соответствует скроллингу вверх на одно письмо. Если осталось менее \(K\) писем, они отображаются все.

Помогите ФД определить, может ли он разнести по папкам все свои письма.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка ввода содержит \(T\) (\(1 \le T \le 10\)), количество подслучаев в тесте, каждый из которых должен решаться независимо. Далее идут \(T\) подслучаев. Для каждого подслучая первая строка содержит \(M\), \(N\), \(K\). Вторая строка содержит \(f_1 \ldots f_N\).

Гарантируется, что сумма \(M\) по всем подслучаям не превысит \(10^4\), а сумма \(N\) по всем подслучаям не превысит \(10^5\).

ФОРМАТ ВЫВОДА (на экран / stdout):

Выведите \(T\) строк, каждая содержит YES или NO, указывая может ли ФД разнести письма для каждого из \(T\) подслучаев.

Sleeping in Class

Жадный алгоритм Префиксные суммы(минимумы, ...) Задачи на моделирование

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

ФД попросил Эльзу записывать количество раз, когда Беси засыпала на каждом занятии. Всего было \(N\) занятий (\(2\le N\le 10^5\)), и Эльза зафиксировала \(a_i\) (\(1\le a_i\le 10^{18}\)) засыпаний на \(i\)-ом занятии. Общее количество засыпаний на всех занятиях не превышает \(10^{18}\).

Эльза хочет представить дело так, что Беси засыпала одинаковое количество раз на каждом занятии.

Единственный способ Эльзы модифицировать свои записи - объединить два соседних занятия или разъединить одно занятие на два. Например, если \(a=[1,2,3,4,5],\) тогда если Эльза объединит второе и третье занятие, то лог станет \([1,5,4,5]\) Если Эльза выберет разделить третье занятие на два, то лог может стать одним из \([1,5,0,4,5]\), \([1,5,1,3,5]\), \([1,5,2,2,5]\), \([1,5,3,1,5]\), or \([1,5,4,0,5]\).

По заданным \(Q\) (\(1\le Q\le 10^5\)) кандидатам \(q_1,\ldots,q_Q\) для наименее любимых Беси чисел (\(1\le q_i\le 10^{18}\)), для каждого из них помогите Эльзе вычислить минимальное количество модификаций лога, чтобы все числа в нём стали одинаковыми.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка каждого теста содержит \(N\), а вторая содержит \(a_1,a_2,\ldots,a_N\). Третья строка содержит \(Q\) - количество запросов, за которым следует \(Q\) строк с целым числом \(q_i\) - кандидат в наименее любимое число Беси.

ФОРМАТ ВЫВОДА (на экран / stdout):

Для каждого \(q_i\) вычислите минимальное количество модификаций, которое требуется для Эльзы, чтобы конвертировать лог в \(q_i\) или выведите \(-1\), если это невозможно.

Loan Repayment

Бинарный поиск по ответу Задачи на моделирование

Фермер Джон должен Беси \(N\) галлонов молока (\(1\le N\le 10^{12}\)). Он должен вернуть ей молоко в течение \(K\) дней. Однако он не хочет отдавать молоко слишком быстро. С другой стороны, он должен показывать прогресс в возвращении долга. Поэтому он должен возвращать Беси не менее \(M\) галлонов молока (\(1\le M\le 10^{12}\)) каждый день.

ФД собирается делать так. Он выбирает положительное целое число \(X\). А затем повторяет следующую процедуру каждый день:

  1. Предположим, что ФД уже отдал Беси \(G\) галлонов молока, он вычисляет \(\frac{N-G}{X}\) с округлением вверх. Назовём это число \(Y\).
  2. Если \(Y\) меньше чем \(M\), то устанавливает \(Y\) равным \(M\).
  3. Даёт Беси \(Y\) галлонов молока.

Определите максимальное \(X\) такое, что если ФД будет следовать этой процедуре, то ФД отдаст Беси не менее \(N\) галлонов молока после \(K\) дней (\(1\le K\le 10^{12}\)).

ОЦЕНИВАНИЕ:

  • Тесты 2-4 удовлетворяют ограничению \(K\le 10^5.\)
  • Тесты 5-11 не имеют дополнительных ограничений.

ФОРМАТ ВВОДА (файл loan.in):

Единственная строка ввода содержит три разделённых пробелом целых положительных числа \(N\), \(K\), \(M\) удовлетворяющих \(K\cdot M<N\).

ФОРМАТ ВЫВОДА (файл loan.out):

Выведите наибольшее положительное целое число \(X\) такое, что ФД отдаст Беси не менее \(N\) галлонов молока используя описанную выше процедуру.

Word Processor

Задачи на моделирование

Беси работает над эссе. Поскольку пишет она некрасиво, она решила набрать эссе в текстовом процессоре.

Эссе содержит \(N\) слов (\(1\le N\le 100\)), разделённых пробелами. Каждое слово имеет длину от 1 до 15 символов включительно, и состоит только из больших или маленьких латинских букв. В соответствии с правилами, эссе должно быть отформатировано специфическим образом: каждая строк должна содержать не более \(K\) (\(1\le K\le 80\)) символов, не считая пробелы. К счастью, текстовый процессор Беси может выполнять это требование при использовании следующей стратегии:

  • Если Беси пишет слово которое может поместится на текущей строке, оно помещается в эту строку.
  • Иначе надо переместить слово в следующую строку и продолжить пополнение этой следующей строки.

Конечно, последовательные слова в одной строке должны быть разделены ровно одним пробелом. Не должно быть пробелов в конце любой строки.

К несчастью, текстовый процессор Беси сломался, помогите ей отформатировать её эссе в соответствии с вышеописанными правилами.

ФОРМАТ ВВОДА (файл word.in):

Первая строка ввода содержит два разделённых пробелом целых числа \(N\) и \(K.\)

Следующая строка содержит \(N\) слов, разделённых одиночными пробелами. Никакое слово не будет длиннее, чем \(K\) символов - максимальное количество символов в одной строке.

ФОРМАТ ВЫВОДА (файл word.out):

Отформатированное корректно эссе Беси.

Left Out

Задачи на моделирование

Фермер Джон снова фотографирует своих коров.

На этот раз он делает фото с воздуха. Он хочет, чтоб все его коровы смотрели в одну сторону. Сейчас коровы организованы в решётку \(N \times N\), (\(2 \leq N \leq 1000\)) внутри квадратного пастбища, как показано ниже:

RLR
RRL
LLR

Здесь 'R' означает, что корова смотри вправо, 'L' означает, что корова смотрит влево. Поскольку коровы находятся в стаде, ФД не может говорить повернуться одной корове. Всё что он может - это повернуть целую строку или целый столбец повернув коров 'L' на 'R' или 'R' на 'L' внутри этой строки/столбца. ФД может поворачивать столбцы и строки сколько угодно раз, в том числе и поворачивать один тот же столбец или строку более чем один раз.

Как оказалось, ФД не может перевернуть всех коров в одном направлении, Но может всех коров кроме одной - определите эту корову.

ФОРМАТ ВВОДА (файл leftout.in):

Первая строка содержит число \(N\). Следующие \(N\) строк описывают строки \(1 \ldots N\) решётки коров, каждая содержит строку длины \(N\).

ФОРМАТ ВЫВОДА (файл leftout.out):

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

Valleys

графы Задачи на моделирование

Беси рассматривает решётку \(N \times N\) ячеек, где каждая ячейка имеет высоту. Каждая ячейка вне этой решётки считается имеющей бесконечную высоту.

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

Более формально:

  • Множество ячеек называется "смежными с торцевой", если можно достичь любую ячейку этого множества из любой двигаясь вправо, влево, вверх, вниз.
  • Множество ячеек называется "точечно-смежным" если можно из любой ячейки множества достичь любой другой ячейки множества, двигаясь, влево, вправо, вверх, вниз или по диагонали.
  • Регион - это непустое множество ячеек "смежных с торцевой".
  • Регион называется дырявым, если дополнение региона (которое включает бесконечные ячейки вне решётки) не является "точечно-смежным".
  • Граница региона - это множество ячеек, ортогонально соседних (вверх, вниз, влево, вправо) к некоторой ячейке региона, но не принадлежащих региону.
  • "Долина" это любой недырявый регион, в котором каждая ячейка имеет высоту ниже чем каждая ячейка границы долины.

Цель Беси - определить сумму размеров всех долин.

Примеры

Это регион:

oo.
ooo
..o

Это не регион (средняя ячейка и нижняя правая ячейка не являются "смежными с торцевой"):

oo.
oo.
..o

Это регион без дыр:

ooo
o..
o..

Это дырявый регион (одна ячейка внутри):

ooo
o.o
ooo

Это другой недырявый регион (центральная ячейка является точечно-смежной с ячейкой в правом нижнем углу):

ooo
o.o
oo.

ФОРМАТ ВВОДА (файл valleys.in):

Первая строка содержит целое число \(N\), где \(1 \le N \le 750\).

Каждая из следующих \(N\) строк содержит \(N\) целых чисел - высоты ячеек решётки. Каждая высота \(h\) удовлетворяет \(1 \le h \le 10^6\). Все высоты различны.

в 19% тестов гарантируется \(N \leq 100\).

ФОРМАТ ВЫВОДА (файл valleys.out):

Выведите одно целое число, сумму размеров всех долин.

Icy Perimeter

Поиск компонент связности Клеточная геометрия Задачи на моделирование

Фермер Джон собирается выпускать и продавать мороженое. Он построил машину, которая производит шарики мороженого, но, к несчастью, немного неправильной формы.

Конфигурация мороженого, которое производится машиной, может быть описано решёткой \(N \times N\) grid (\(1 \leq N \leq 1000\)):

##....
....#.
.#..#.
.#####
...###
....##

Каждый символ '.' представляет пустое место, а каждый символ '#' представляет \(1 \times 1\) квадратную ячейку мороженого.

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

ФД хочет найти площадь и периметр сгустка, который имеет наибольшую площадь. Площадь сгустка равна количеству символов '#' в его картинке. Если несколько сгустков имеют одинаковую площадь, он хочет знать минимальный периметр из них. На рисунке выше, маленький сгусток имеет площадь 2 и периметр 6, а больший сгусток имеет площадь 13 и периметр 22.

Заметим, что сгусток может иметь "дыру" внутри (пустое пространство, окружённое мороженым). В таком случае граница "дыры" также учитывается в периметре сгустка. Сгусток может находиться внутри другого сгустка, в этом случае они рассматриваются как независимые сгустки. Например, ниже представлен сгусток площади 1 внутри сгустка площади 16:

#####
#...#
#.#.#
#...#
#####

ФОРМАТ ВВОДА (файл perimeter.in):

Первая строка ввода содержит \(N\), а следующие \(N\) строк описывают вывод машины. Присутствует, как минимум, один символ '#'.

ФОРМАТ ВЫВОДА (файл perimeter.out):

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

Shell Game

Задачи на моделирование

Корова Беси со своей подружкой Эльзой любят играть в следующую игру.

Сначала Беси кладёт три перевёрнутые ракушки на стол и маленький круглый камешек под одну из них. Затем Беси меняет пары ракушек, а Эльза пытается угадать где камешек.

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

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

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

ФОРМАТ ВВОД (файл shell.in):

Первая строка входного файла содержит целое число \(N\), задающее количество обменов (\(1 \leq N \leq 100\)). Каждая из последующих \(N\) строк описывает шаг игры и содержит три целых числа \(a\), \(b\), \(g\), указывающих, что ракушки \(a\) и \(b\) обмениваются Беси, а затем Эльза говорит, что после обмена камешек находится под ракушкой \(g\). Все эти три целых числа принимают одно из значений 1, 2, 3 и \(a \neq b\).

ФОРМАТ ВЫВОДА (файл shell.out):

Выведите максимальное количество очков, которое может заработать Эльза.

Sleepy Cow Herding

Жадный алгоритм Разбор случаев Задачи на моделирование

Три лучшие коровы Фермера Джона Беси, Эльза и Милдред всегда уходят далеко от фермы. Помогите ФД "сгрудить их в стадо".

Главное поле фермы можно представить в виде числовой прямой, и каждая корова находится в целочисленной координате. Все три координаты различны. ФД хочет переместить их так, чтобы они заняли последовательные координаты (например, 6,7,8).

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

Определите минимальное и максимальное количество перемещений, которое возможно сделать прежде чем коровы расположатся в трёх последовательных позициях.

ФОРМАТ ВВОДА (файл herding.in):

Входной файл содержит одну строку с тремя разделёнными пробелами целыми числами, определяющими координаты Беси, Эльзы и Милдред. Каждая координата - целое число в интервале \(1 \ldots 10^9\).

ФОРМАТ ВЫВОДА (файл herding.out):

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

Measuring Traffic

Задачи на моделирование

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

К несчастью, ФД уронил свои датчики в молоко, и теперь они работают не очень хорошо. Вместо вывода точного значения трафика, датчик теперь выдаёт диапазон возможных значений. Например, датчик может показывать диапазон \([7, 13]\), означающий, что плотность трафика на этом участке не меньше чем 7 и не больше чем 13.

Шоссе вдоль фермы имеет протяжённость в \(N\) миль и движение происходит в одном направлении от мили 1 к миле \(N\). ФД хочет установить \(N\) датчиков, по одному на каждом одномильном сегменте шоссе. В некоторых из этих сегментов имеются пандусы для въезда, которые позволяют трафику вливаться на шоссе; в каждом из таких случаев ФД устанавливает свой датчик так, чтобы измерять (примерно) входящий трафик. В некоторых сегментах имеются пандусы для выезда, здесь ФД устанавливает датчик так, чтобы измерять выходящий трафик. Каждый сегмент содержит не более одного пандуса. Если на сегменте нет пандусов, ФД устанавливает датчик на собственно шоссе.

По заданным показаниям \(N\) датчиков, определите наиболее точно диапазоны, описывающие движение на шоссе от мили 1 к миле \(N\). Эти диапазоны должны не противоречить показаниям всех \(N\) датчиков.

ФОРМАТ ВВОДА (файл traffic.in):

Первая строка содержит число \(N\) (\(1 \leq N \leq 100\)). Каждая из оставшихся \(N\) строк описывает одномильный сегмент дороги в порядке от мили 1 к миле \(N\). Каждая строка сначала содержит символы "on" (если это сегмент с пандусом для въезда), "off" (если это сегмент с пандусом для выезда), "none", если сегмент не содержит пандусов, за которыми следуют два целых числа в интервале \(0 \ldots 1000\), описывающих интервал, показанный соответствующим датчиком. Если сегмент с пандусом - считывается показание с датчика на пандусе, иначе - с датчика на шоссе. Как минимум для одного датчика будет указано "none".

ФОРМАТ ВЫВОДА (файл traffic.out):

Первая строка вывода должна содержать два целых числа наиболее точно задающих интервал трафика до мили 1. Вторая строка должна содержать два целых числа, определяющих возможный диапазон трафика после мили \(N\). Гарантируется, что решение существует для всех тестов.

ФОРМАТ ВВОДА:

4
on 1 1
none 10 14
none 11 15
off 2 3

ФОРМАТ ВЫВОДА:

10 13
8 12

В этом примере, комбинация считываний датчиков с сегментов 2 и 3 сужает интервал до \([11, 14]\), поскольку только показания в этом интервале соответствуют обоим считываниям \([10,14]\) и \([11,15]\). На миле 1 ровно значение 1 представляет входящий трафик, поэтому входящий трафик может быть в диапазоне \([10, 13]\). На миле 4 от 2 до 3 единиц потока может покинуть трафик, поэтому выходной поток после мили 4 может быть \([8,12]\).

Автор: Brian Dean

Cow Gymnastics

Задачи на моделирование

Чтобы улучшить свои фигуры коровы занялись гимнастикой. Фермер Джон назначил любимую корову Бесси тренером для \(N\) других коров. В каждом из \(K\) практических занятий (\(1 \leq K \leq 10\)), Бесси ранжирует \(N\) коров в соответствии с их результатами (\(1 \leq N \leq 20\)).

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

Помогите Бесси вычислить количество состоятельных пар.

ФОРМАТ ВВОДА (файл gymnastics.in):

Первая строка входного файла содержит два положительных целых числа \(K\) и \(N\). Каждая из следующие \(K\) строк содержит целые числа \(1 \ldots N\) в некотором порядке, указывающих ранжирование коров (коровы обозначены числами \(1 \ldots N\)). Если \(A\) появилась раньше \(B\) в одной из этих строк, то корова \(A\) выполнила это упражнение лучше, чем корова \(B\).

ФОРМАТ ВЫВОДА (файл gymnastics.out):

В одной строке выведите количество состоятельных пар.

Rental Service

Жадный алгоритм Использование сортировки Задачи на моделирование

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

У ФД есть \(N\) коров (\(1 \leq N \leq 100,000\)), каждая способна производить некоторое количество молока каждый день. \(M\) магазинов (\(1 \leq M \leq 100,000\)) недалеко от фермы Джона покупают определённое количество молока, каждый по своей цене. Более того, \(R\) (\(1 \leq R \leq 100,000\)) соседних фермеров заинтересованы в аренде коров по некоторой цене.

ФД должен выбрать для каждой коровы, доить её самому или отдать в аренду соседнему фермеру. Помогите ФД определить максимальное количество денег, которое он может заработать за один день.

ФОРМАТ ВВОДА (файл rental.in):

Первая строка ввода содержит \(N\), \(M\), \(R\). Каждая из следующих \(N\) строк содержит целое число \(c_i\) (\(1 \leq c_i \leq 1,000,000\)), указывающее, что \(i\)-ая корова ФД может произвести \(c_i\) галлонов молока в день. Каждая из \(M\) строк содержит два целых числа \(q_i\) и \(p_i\) (\(1 \leq q_i, p_i \leq 1,000,000\)), которые обозначают, что \(i\)-ый магазин готов купить \(q_i\) галлонов молока по \(p_i\) центов за галлон. Имейте ввиду, что ФД может продавать любое количество молока от 0 до \(q_i\) галлонов в этот магазин. Каждая из следующих \(R\) строк содержит целое число \(r_i\) (\(1 \leq r_i \leq 1,000,000\)), означающее, что один из соседей ФД хочет арендовать корову за \(r_i\) центов в день.

ФОРМАТ ВЫВОДА (файл rental.out):

Вывод должен содержать одну строку - максимальную прибыль ФД, которую он может получить за один день, доя или сдавая в аренду каждую из своих коров. Заметим, что ответ может оказаться большим, чтобы поместиться в 32-битное целое, поэтому Вы должны использовать тип как "long long" в C/C++.

Lifeguards

Задачи на моделирование

Фермер Джон открыл бассейн для своих коров, чтобы они там отдыхали и потом давали больше молока.

Чтобы обеспечить безопасность, он нанял \(N\) коров спасателями, каждый из которых работает в течение некоторого интервала времени в течение дня. Для простоты, бассейн открыт с момента времени \(t=0\) до момента времени \(t=1000\) каждый день. Поэтому каждый интервал может быть описан двумя целыми числами - временем начала и конца работы спасателя. Например, спасатель, начинающий в момент времени \(t = 4\) и завершающий в момент времени \(t = 7\), покрывает интервал в три единицы времени.

К несчастью, ФД нанял на одного спасателя больше чем может платить зарплату. При условии, что он должен уволить одного спасателя, какой максимальный интервал времени, будет покрыт оставшимися спасателями? Интервал времени покрыт, если присутствует хоть один спасатель в это время.

ФОРМАТ ВВОДА (файл lifeguards.in):

Первая строка ввода содержит \(N\) (\(1 \leq N \leq 100\)). Каждая из последующих \(N\) строк описывает интервалы работы спасателей двумя целыми числами в интервале \(0 \ldots 1000\), задающими начало и конец работы спасателя. Все числа концы интервалов - различны. Сами интервалы могут перекрываться.

ФОРМАТ ВЫВОДА (файл lifeguards.out):

Выведите одно целое число - максимальное количество времени, которое останется покрытым, если ФД уволит одного спасателя.

Teleportation

Задачи на моделирование

Большего всего из фермерских забот Фермер Джон ненавидит убирать лотки с коровьим навозом. Для того чтобы упростить процесс он придумал телепортер навоза. Вместо того, чтобы везти навоз в тележке за трактором, он может использовать телепортер для перемещения навоза из одного места в другое.

Ферма Джона построена вдоль длинной прямой дороги, поэтому любое место фермы может быть описано его позицией на этой дороге (точка на числовой прямой). Телепортер описывается двумя числами \(x\) и \(y\), которые обозначают, что навоз из точки \(x\) может быть мгновенно телепортирован в точку \(y\) и наоборот.

ФД хочет транспортировать навоз из точки \(a\) в точку \(b\), и он может использовать телепортер в этом процессе (или не использовать, если он не поможет). Помогите ФД определить минимальное расстояние, которое он должен провести навоз на тракторе.

ФОРМАТ ВВОДА (файл teleport.in):

Первая и единственная строка ввода содержит четыре целых числа, разделённых одиночными пробелами \(a\) и \(b\), описывающие начальную и конечную точку, за которыми \(x\) и \(y\), описывающие телепортер. Все позиции - целые числа в интервале \(0 \ldots 100\), и они необязательно отличаются друг от друга.

ФОРМАТ ВЫВОДА (файл teleport.out):

Выведите одно целое число - минимальное расстояние, которое ФД должен провести навоз на тракторе.

Taming the Herd

Задачи на моделирование

Однажды утром Фермер Джон проснулся от звуков дробления древесины. Это коровы ломали амбар.

ФД рассердился. Он приделал к стене счётчик дней с последнего слома. Если слом случился утром, счётчик покажет 0. Если последний слом случился 3 дня назад, счётчик показывает 3. ФД тщательно записывал значение счётчика каждый день.

В конце года ФД решил действовать. Однако некоторые записи потерялись.

ФД знает, что он начал записи с дня слома. Помогите ФД определить по оставшимся записям минимальное и максимальное количество сломов, которые могли произойти в течение логгирования.

ФОРМАТ ВВОДА (файл taming.in):

Первая строка содержит одно целое число \(N\) (\(1 \leq N \leq 100\)), обозначающее количество дней с того момента как ФД начал записи.

Вторая строка содержит \(N\) целых чисел, разделённых одиночными пробелами. \(i\)-ое число есть либо \(-1\), означающее что запись за этот день пропала, ил неотрицательное число \(a_i\) (не более \(100\)), означающая, что в день \(i\) значение счётчика было \(a_i\).

ФОРМАТ ВЫВОДА (файл taming.out):

Если не существует последовательности событий, адекватной сохранившимся записям, выведите \(-1\). Иначе выведите два разделённых пробелом целых числа \(m\) и \(M\), где \(m\) - минимальное количество сломов, соответствующее последовательности событий лога, а \(M\) - максимальное.

Mooyo Mooyo

Поиск компонент связности Задачи на моделирование реализация

Имея много свободного времени, коровы Фермера Джона часто играют в видеоигры. Одна из их любимых игр похожа на Puyo Puyo. Коровья версия этой игры называется Му-Му.

Игра Му-Му происходит на высокой узкой решётке из \(N\) ячеек в высоту и (\(1 \leq N \leq 100\)) и 10 ячеек в ширину. Вот пример для \(N = 6\):

0000000000
0000000300
0054000300
1054502230
2211122220
1111111223

Каждая ячейка или пустая (обозначена 0) или содержит стог сена одного из 9 различных цветов (обозначенных символами 1..9). Гравитация вынуждает стоги сена падать вниз, поэтому никогда 0 не будет ниже, чем стог сена.

Две ячейки принадлежат одному и тому же связному региону, если они имеют общую вертикальную или горизонтальную сторону и один и тот же цвет, отличный от 0. Каждый раз, когда регион начинает содержать \(K\) или более ячеек, все его стоги сена исчезают - превращаются в 0. Если в один момент времени существует несколько таких регионов они исчезают все одновременно. Затем, гравитация может вынудить стоги сена заполнить некоторые из ячеек, которые стали нулевыми. В получившейся конфигурации могут снова образоваться региона размера не менее \(K\) ячеек. В этом случае они также исчезают (одновременно, если есть несколько таких регионов). Затем гравитация вновь двигает вниз стоги сена и процесс повторяется, пока есть хоть один регион, в котором не менее \(K\) стогов.

По заданной конфигурации доски для Му-Му вычислите финальную картинку доски после выполнения всех операций.

ФОРМАТ ВВОДА (файл mooyomooyo.in):

Первая строка ввода содержит \(N\) и \(K\) (\(1 \leq K \leq 10N\)). Оставшиеся \(N\) строк задают начальное состояние доски.

ФОРМАТ ВЫВОДА (файл mooyomooyo.out):

Выведите \(N\) строк, описывающих финальное состояние поля.

The Bucket List

Задачи на моделирование

Фермер Джон хочет изменить расположение бидонов для дойки его коров. Он думает что их станет нужно меньше, но он не знает, сколько точно. Помогите ему.

У ФД \(N\) коров (\(1 \leq N \leq 100\)), последовательно пронумерованных \(1 \ldots N\). I-ую корову необходимо доить в интевале от времени \(s_i\) до времени \(t_i\), и для дойки требуется \(b_i\) бидонов. Процесс дойки нескольких коров может проходить в одно и то же время. Если так, то не могут использоваться одни и те же бидоны для дойки разных коров. То есть, бидон, назначенный корове \(i\) не может для дойки других коров во время от \(s_i\) до \(t_i\). Вне этого временного окна, этот бидон может быть использован для дойки других коров. Для того, чтобы упростить себе работу, ФД обеспечивает, что в любой момент времени не более одна корова начинает или заканчивает дойку. (то есть все \(s_i\) и \(t_i\) различны)

У ФД есть место, где храняться все бидоны, последовательно пронумерованные 1, 2, 3 ... В текущей стратегии дойки, когщда некоторая корова (например корова \(i\)) начинает дойку (в момент времени \(s_i\)) ФД идёт в комнату хранения, берёт \(b_i\) баллонов с наименьшими номерами и назначает их для дойки коровы \(i\).

Определите, сколько всего баллонов нужно ФД иметь в комнате хранения, чтобы успешно подоить всех коров.

ФОРМАТ ВВОДА (файл blist.in):

Первая строка воода содержит число \(N\). Каждая из следующих \(N\) строк описывает одну корову и содержит три числа \(s_i\), \(t_i\), \(b_i\), разделённых одиночными пробелами. \(s_i\) и \(t_i\) - целые числа в интервале \(1 \ldots 1000\), \(b_i\) - целое число в интервале \(1 \ldots 10\).

ФОРМАТ ВЫВОДА (файл blist.out):

Выведите одно целое число - сколько баллонов нужно ФД.

Mixing Milk

Задачи на моделирование

Фермерство - соревновательный бизнес --- особенно производство молока. Фермер Джон осознал, что если он не придумаетчто-то инновационное, его ежедневный бизнес может сильно пострадать.

К счастью, у ФД есть хорошая идея. Его три лучшие коровы Беси, Эльза и Милдред дают молоко различного вкуса. Поэтому он планирует смешивать молоко для получения совершенного вкуса.

Чтобы смешать три различных вида молока, он берёт три бидона с молоком - по бидону от каждой коровы. Эти бидоны могут иметь различные размеры и могут быть заполнены не полностью. Он переливает часть молока из бидона 1 в бидон 2, затем из бидона 2 бидон 3, затем из бидона 3 в бидон 1, снова из бидона 1 в бидон 2 и т.д. циклически. Всего он выполняет 100 таких операций. (100-ая будет как раз из бидона 1 в бидон 2). Когда ФД переливает молоко из бидона \(a\) в бидон \(b\), он переливает переливает молоко пока это возможно то есть или пока бидон \(a\) станет пустым, или бидон \(b\) станем полным.

Пожалуйста, подскажите ФД, сколько молока будет в каждом бидоне, после того как он выполнит все 100 переливаний.

ФОРМАТ ВВОДА (файл mixmilk.in):

Первая строка ввода содержит два разделённых пробелом целых числа: ёмкость первого бидона \(c_1\) и количество молока в первом бидоне \(m_1\) Оба числа положительные, и не превышают 1 миллиард, причём \(c_1 \geq m_1\). Вторая и третья строки содержат аналогичную информацию про второй и третий бидоны (вместимость и наполненность).

ФОРМАТ ВЫВОДА (файл mixmilk.out):

Выведите три строки - финальное количество молока в каждом из бидонов после выполнения 100 операций переливания.

The Bovine Shuffle

Задачи на моделирование

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

Он решил учить их танцу "Bovine Shuffle". Этот танец состоит из \(N\) коров (\(1 \leq N \leq 100\)) выстроенных в ряд в некотором порядке, после которого они снова будут выстроены в ряд, возможно в другом порядке. ФД отметил позиции \(1 \ldots N\), и первая корова становится на позицию 1, вторая - на позицию 2, ..., последняя на позицию \(N\).

Перестановка описывается N числами \(a_1 \ldots a_N\), где корова из позиции i перемещается на позицию \(a_i\) во время перестановки (и конечно каждое \(a_i\) есть число от 1 до N). Каждая корова двигается на свою новую позицию во время перестановки. К счастью, все \(a_i\) различны, поэтому никакие две коровы не пойдут в одну и ту же позицию во время перестановки.

Каждой из коров ФД назначен уникальный ID из 7 цифр. Вам даётся порядок коров после трёх перестановок, определите начальный порядок.

ФОРМАТ ВВОДА (файл shuffle.in):

Первая строка ввода содержит \(N\), количество коров. Следующая строка содержит \(N\) целых чисел \(a_1 \ldots a_N\). Последняя строка содержит порядок \(N\) коров после трёх перестановок, для каждой коровы указан её ID.

ФОРМАТ ВЫВОДА (файл shuffle.out):

Вы должны вывести \(N\) строк, по одному ID в строке, указав порядок коров перед тремя перестановками.

Milk Measurement

Задачи на моделирование

Фермер Джон купил трёх коров: Bessie, Elsie, Mildred, каждая из которых изначально производит 7 галлонов молока в день. Поскольку надои коровы меняются с течением времени, ФД записал измерения в течение 100 дней в следующем виде:

35 Bessie -2
14 Mildred +3

Первая строка означает, в что в день 35 Bessie дала на 2 галлона меньше, чем во время последнего измерения. Следующая строка означает, что в день 14 Mildred дала на 3 галлона молока больше, чем во время последнего измерения. ФД делает не больше одного измерения в день. К несчастью, записи идут у него не обязательно в хронологическом порядке.

Для мотивации коров, ФД отображает на стене амбара карточку коровы, которая сейчас даёт больше всех молока. (Если таких коров несколько, он отображает все карточки). Определите количество дней, в которые ФД должен будет менять это отображение.

ФОРМАТ ВВОДА (файл measurement.in):

Первая строка ввода содержит \(N\), количество измерений, которые сделал ФД. Каждая из последуюших \(N\) строк описывает одно измерение, в формате, описанном выше. день (целое число от 1 до 100), имя коровы, и изменение производительности (ненулевое целое число). Количество молока, которое даёт любая корова, всегда будет в интервале 0..1000.

ФОРМАТ ВЫВОДА (файл measurement.out):

Выведите количество дней, (целое число от 0 до 100), в которые ФД должен будет менять карточки коров.

Bull in a China Shop

Перебор реализация Задачи на моделирование

Фермер Джон решил украсить свой дом. Посетив местный китайский магазинчик, увидел стеклянную фигурку коровы и решил её купить.

Форма этой коровы описывается решёткой из \(N \times N\) символов (\(3 \leq N \leq 8\)), пример показан ниже, где символы '#' представляют часть коровы, а символы '.' не части коровы.

...............
...............
...............
#..#...........
####...........
############...
.##.#########..
....#######.##.
....##...##....
....##...##....
...............
...............
...............
...............
...............

К несчастью, ФД ещё не спел купить корову, как в магазинчик ворвался бык, который поломал всё вокруг, включая корову ФД. Корова разломалась на две части, которые затерялись среди других \(K\) (\(3 \leq K \leq 10\)) кусков стекла на полу. Каждый из этих \(K\) кусков описывается решёткой \(N \times N\) символов, как и исходная фигурка.

Помогите ФД определить, какие из этих \(K\) кусков являются двумя частями фигурки ФД. При падении на землю куски ФД не поворачивались и не переворачивались, поэтому для их сборки ФД должен только сдвигать куски горизонтально или вертикально. Куски не могут наезжать друг на друга и должны сформировать точно исходную фигуру.

ФД может двигать оба куска горизонтально и/или вертикально на любое количество позиций, но так, чтобы все символы '#' оставались внутри решётки \(N \times N\). Форма каждого из кусков необязательно состоит из связного региона символов '#'. Но при сдвиге все они сдвигаются на одинаковое количество позиций.

ФОРМАТ ВВОДА (файл bcs.in):

Первая строка ввода содержит \(N\) и \(K\). Следующие \(N\) строк описывают исходную фигурку ФД. Следующие \(KN\) строк задают \(K\) решёток символов, описывающих \(K\) кусков, которые ФД нашёл на полу.

ФОРМАТ ВЫВОДА (файл bcs.out):

Выведите одну строку, содержащую два разделённых пробелом целых числа, каждое в интервале \(1 \ldots K\), указывающих индексы двух кусков коровы ФД. Решение всегда существует и уникально. Числа, которые Вы выведете, должны быть в порядке возрастания.

Bessie Slows Down

Задачи на моделирование


Бесси участвует в лыжной гонке через всю страну. Он начала движение со скоростью 1 м/сек. Однако по мере уставания, она замедляет ход по следующим правилам. После первого замедления её скорость становится 1/2 м/сек, после второго замедления – 1/3 м/сек и т.д.
Вам говорится когда и где Беси замедляется в терминах серии таких событий:
T 17
Означает, что Беси замедлилась в конкретное время после 17 секунд гонки.
D 10
Означает, что Беси замедлилась на дистанции 10 метров от старта.
По заданному списку из N таких событий (1 <= N <= 10,000), пожалуйста определите количество времени в секундах, которое потребуется Беси, чтобы преодолеть расстояние в 1 километр. Округлите свой ответ до ближайшего целого (0.5 округляется к 1).
PROBLEM NAME: slowdown
Формат входных данных
* Строка 1: Значение N.
* Строки 2..1+N: Каждая строка имеет вид "T x" или "D x", указывая на событие по времени или событие по расстоянию. В обоих случаях, х – целое число. Гарантируется, что все события произойдут, прежде чем она пройдёт 1 км. Возможно такое, что несколько событий произойдут одновременно, вынуждая Беси замедляться “quite a bit all at once” (?сразу несколько раз). События могут идти не по порядку.


Формат выходных данных
* Строка 1: Общее время, которое потребуется Беси, чтобы преодолеть расстояние в 1 км.
Примечание
Беси путешествует первые 10 метров со скоростью 1 м/сек, и это займёт у неё 10 секунд. Затем она замедлится до ? м/сек, и она потратит 20 сек на следующие 10 метров. В этот момент она достигнет отметки в 30 сек, где скорость уменьшится до 1/3 м/сек. Оставшиеся 980 метров займут у неё 980*3 = 2940 сек. Общее время = 10 + 20 + 2940 = 2970.

Building a Ski Course

Задачи на моделирование


Фермер Джон помогает превратить его большое поле в лыжный маршрут для предстоящих Му-олимпийских игр. Поле имеет размеры M x N (1 <= M,N <=100) и его целевое финальное состояние описывается решеткой из M x N символов таких как:
RSRSSS RSRSSS RSRSSS
Каждый символ описывает состояние снега на этом участке R – грубый, S – гладкий (организаторы считают, что в таком случае - чередования грубых и гладких участков, гонка будет интересней).
Для выполнения этой задачи ФД планирует модифицировать свой трактор так, чтобы тот мог «отштамповать» любой фрагмент размером B x B (B<=M,B<=N) грубым снегом или гладким снегом. ФД хочет сделать B как можно большим. С B=1 он может подготовить поле, штампуя индивидуально квадраты в соответствии с заданным финальным состоянием. Однако для бОльших значений B может оказаться невозможным выполнить задачу. Каждый квадрат поля должен быть обработан трактором. Невозможно оставить ячейку поля в исходном состоянии.
Помогите ФД определить максимально возможное значение B, которое он сможет успешно использовать.
PROBLEM NAME: skicourse
Формат входных данных
* Строка 1: Два разделённых пробелом целых числа M и N.
* Строки 2..M+1: M строк ровно по N символов (каждый R или S), описывающих желаемое финальное состояние поля.
Формат выходных данных
* Строка 1: Максимальное значение B, которое ФД может использовать, чтобы создать нужное поле.


Примечание
ФД может отштамповать R колонках 1-3, затем S в колонках 2-4, затем R в колонках 3-5, и наконец, S в колонках 4-6.

Bessie Slows Down

Задачи на моделирование


Бесси участвует в лыжной гонке через всю страну. Он начала движение со скоростью 1 м/сек. Однако по мере уставания, она замедляет ход по следующим правилам. После первого замедления её скорость становится 1/2 м/сек, после второго замедления – 1/3 м/сек и т.д.
Вам говорится когда и где Беси замедляется в терминах серии таких событий:
T 17
Означает, что Беси замедлилась в конкретное время после 17 секунд гонки.
D 10
Означает, что Беси замедлилась на дистанции 10 метров от старта.
По заданному списку из N таких событий (1 <= N <= 10,000), пожалуйста определите количество времени в секундах, которое потребуется Беси, чтобы преодолеть расстояние в 1 километр. Округлите свой ответ до ближайшего целого (0.5 округляется к 1).
PROBLEM NAME: slowdown
Формат входных данных
* Строка 1: Значение N.
* Строки 2..1+N: Каждая строка имеет вид "T x" или "D x", указывая на событие по времени или событие по расстоянию. В обоих случаях, х – целое число. Гарантируется, что все события произойдут, прежде чем она пройдёт 1 км. Возможно такое, что несколько событий произойдут одновременно, вынуждая Беси замедляться “quite a bit all at once” (?сразу несколько раз). События могут идти не по порядку.


Формат выходных данных
* Строка 1: Общее время, которое потребуется Беси, чтобы преодолеть расстояние в 1 км.
Примечание
Беси путешествует первые 10 метров со скоростью 1 м/сек, и это займёт у неё 10 секунд. Затем она замедлится до ? м/сек, и она потратит 20 сек на следующие 10 метров. В этот момент она достигнет отметки в 30 сек, где скорость уменьшится до 1/3 м/сек. Оставшиеся 980 метров займут у неё 980*3 = 2940 сек. Общее время = 10 + 20 + 2940 = 2970.

Airplane Boarding

Задачи на моделирование

Problem 3: Airplane Boarding [Travis Hance]
Коровы прибыли в в аэропорт и столкнулись с интересной проблемой.
В самолёте имеется N мест, которые мы моделируем как точки от x=1 до x=N на числовой прямой. Все N коров (1 <= N <= 200,000) стоят в ряд, ожидая занятия своего места. Корова N стоит на позиции x=0, корова N-1 на позиции x=-1 и т.д. Корове I назначено место Si, где S1, S2, … - это перестановка чисел от 1 до N.
Каждую секунду каждая корова делает шаг вправо, если она может. Когда корова I достигает своего места Si, она останавливается, чтобы положить багаж в верхний отсек салона, это занимает у неё Ti секунд, затем она садится. В течение этих Ti секунд, следующая за этой корова (если она есть) блокируется и не может двигаться вперёд. Если за ней вплотную стоят коровы, то они тоже все блокируются.
Сколько времени займёт посадка?
Сумма всех Ti будет меньше чем 1,000,000,000.
PROBLEM NAME: boarding
Формат входных данных
* Строка 1: Одно целое число, N.
* Lines 2..N+1: Два разделённых пробелом целых числа, Si и Ti.
Формат выходных данных
* Строка 1: Одно целое число, задающее количество времени, которое потребуется, чтобы все коровы заняли свои места.
Примечание
После первой секунды, все сдвинутся на 1 вправо и корова 3 достигнет своего места:
123 123
Корове 3 потребуется 5 секунд, чтобы сесть, после чего она «исчезает».
12 123
Потребуется еще 3 секунды коровам 1 и 2 чтобы добраться до своих мест:
12 123
Корове 1 потребуется 5 секунд, чтобы сесть, корове 2 – 10, поэтому ВСЕ усядутся через 10 секунд.
Общее время посадки: 1 + 5 + 3 + 10 = 19 секунд

Luxury River Cruise

Задачи на моделирование


Фермер Джон берет Беси и других коров в круиз по сети рек с N портами (1 <= N <= 1,000) пронумерованными от 1 до N, начиная в порту 1. Из каждого порта ведут ровно две реки и движение одностороннее.
В каждом порту нужно выбирать куда плыть - по левой реке или по правой реке, Туристический маршрут состоит из последовательности из M (1 <= M <= 500) направлений (каждое их которых влево или вправо), которую необходимо повторить K раз (1 <= K <= 1,000,000,000).
Помогите ФД определить, где закончится его маршрут.
PROBLEM NAME: cruise
Формат входных данных
* Строка 1: Три разделенных пробелом целых числа N, M, K.
* Строки 2..N+1: Строка i+1 содержит два разделенных пробелом целых числа, представляющих номера портов влево и вправо соответственно.
* Сроки N+2..N+2: M разделенных пробелами символов, 'L' или 'R'. 'L' представляет выбор 'влево' и 'R' представляет выбор 'вправо'.

Формат выходных данных
* Строка 1: Одно целое число - номер порта, в котором завершится круиз
Примечание
После первой итерации последовательности, ФД окажется в порту 2 (1 -> 2 -> 3 -> 2), после второй - в порту 3 (2 -> 3 -> 4 ->3), после третьей - в порту 4 (3 -> 4 -> 1 -> 4).

Bovine Ballet

Задачи на моделирование


Чтобы сломать стереотипное представление о коровах как о неловких созданиях, корова Беси пошла на балетные курсы. Ее финальное представление состоится на следующей неделе, и ФД хочет помочь ей, построив прямоугольную сцену, достаточную для всего ее представления.
Танец выполняется на прямоугольной сцене, состоящей из квадратных ячеек размером 1 х 1. Ноги Беси описываются следующим образом:
FR: передняя правая нога FL: передняя левая нога RR: задняя правая нога RL: задняя левая нога
В начале танца все 4 ноги находятся в соседних ячейках и формируют квадрат как показано ниже, причем Беси смотрит на север.
FL FR RL RR
Танец Беси - это последовательность из N инструкций (1 <= N <= 1000), где каждая инструкция предписывает либо переместить одну ногу на одну ячейку, или повернуться на 90 градусов по часовой стрелке.
Инструкции переместить ногу состоят из 3 символов, первые два описывают какую ногу перемещать, а последний символ указывает направление движения (F = вперед, B = назад, R = вправо, L = влево). Например, FRF означает переместить правую ногу вперед на одну ячейку, а RLR - означает переместить заднюю левую ногу вправо. Конечно направление движения относительно того направления, куда сориентирована Беси.
Инструкция на поворот также состоит из 3 символов, первые два указывают единственную ногу Беси, которая останется в той же клетке где была и вокруг которой она повернется на 90 градусов по часовой стрелке. В этом случае последний символ - P (поворот). Например, инструкция "FRP" означает, что Беси должна повернуться на 90 градусов по часовой стрелке вокруг своей стационарной передней правой ноги. Например, если Беси ориентирована на север, и ноги расположены так: .. .. .. .. .. FR .. FL .. .. RL RR
то после инструкции "FRP" ее ноги будут расположены так, а Беси будет ориентирована на восток:
RL FL .. RR .. FR .. .. .. .. .. ..
Вам даны N инструкций танца Беси, вычислите минимальную площадь сцены прямоугольной формы, необходимой для того чтобы ноги Беси находились на ней во время всего танца.
Если Беси шагнет в ту же ячейку, где сейчас находится другая нога, она упадет, и танец закончится, в этом случае выводите -1. Заметим, что это единственный случай, когда Беси упадет. Она хорошо напрактиковалась, и ее ноги могут находиться в самых разных, даже странных комбинациях, например, когда ее задние ноги находятся впереди передних.
PROBLEM NAME: ballet
Формат входных данных
* Строка 1: Цедое число N.
* Строки 2..1+N: Каждая строка содержит одну из 3-символьных инструкций.
Формат выходных данных
* Строка 1: Минимальная площадь прямоугольной сцены, содержащей ноги Беси во время всего танца, или -1, если Беси упадет.
Примечание
Беси нужна сцена 4 x 4, ее ноги будут располагаться так:
.. .. .. .. .. .. .. .. (смотрит на север) .. .. FL FR .. .. RL RR
After FRF:
.. .. .. .. .. .. .. FR (смотрит на север) .. .. FL .. .. .. RL RR
After FRP:
.. RL FL .. .. RR .. FR (смотрит на восток) .. .. .. .. .. .. .. ..
After RLB:
RL .. FL .. .. RR .. FR (смотрит на восток) .. .. .. .. .. .. .. ..

Blink

Задачи на моделирование


Недовольный освещением своего амбара, Фермер Джон установил новый канделябюр состоящий из N (3 <= N <= 16) лампочек, размещенных по кругу.
Коровы играют в следующую игру: в момент времени T они переключают состояние всех лампочек, сосед которых слева был переключен в момент времени T-1. Они продолжают это процесс, в течение B единиц времени (1<=B<=10^15). Заметим, что B может быть таким большим, что не поместится в стандартное 32-битное целое.
По заданному начальному состоянию всех лампочек определите их конечное состояние по истечению B единиц времени.
PROBLEM NAME: blink
Формат входных данных
* Строка 1: Два разделенных пробелом целых числа, N и B.
* Строки 2..1+N: Строка i+1 содержит начальное состояние лампочки i, r 0 (off) или 1 (on).
Формат выходных данных
* Строки 1..N: Строка i должна содержать финальное состояние лампочки i, 0 (off) или 1 (on).
Примечание
Состояние лампочек переключалось следующим образом: Time T=0: 1 0 0 0 0 Time T=1: 1 1 0 0 0 Time T=2: 1 0 1 0 0 Time T=3: 1 1 1 1 0 Time T=4: 1 0 0 0 1 Time T=5: 0 1 0 0 1 Time T=6: 1 1 1 0 1

Cow Race

Задачи на моделирование


Чтобы окончательно решить вопрос кто быстрее, Беси и ее подруга Эльза решили провести гонки вокруг фермы.
Обе коровы стартуют в одном и том же месте, в одно и то же время и начинают бежать в одном направлении. Прогресс каждой коровы описывается серией отрезков, в течение которого данная корова имеет одинаковую скорость. Например, Бэси может бежать со скоростью 5 в течение 3 единиц времени, затем со скоростью 6 в течение 6 единиц времени. Обе бегут одинаковое общее количество времени.
Коровы попросили Вас посчитать количество раз, когда менялось лидерство в их гонке. Лидерство меняется в той точке времени, когда корова A обгоняет корову B или наоборот.
PROBLEM NAME: cowrace
Формат входных данных
* Строка 1: Два разделенных пробелом целых числа, N и M. (1 <= N, M <= 1000)
* Строки 2..1+N: Каждая строка содержит один из N отрезков бега Беси, описанный двумя целыми числами: скорость и количество времени, которое она бежала с данной скоростью (оба числа в диапазоне от 1 до 1000).
* Строки 2+N..1+N+M: Каждая строка содержит один из M отрезков бега Эльзы, описанный двумя целыми числами: скорость и количество времени, которое она бежала с данной скоростью (оба числа в диапазоне от 1 до 1000).
Формат выходных данных
* Строка 1: Количество раз когда изменилось лидерство в забеге.
Примечание
Эльза была впереди до момента времени t=3, когда обе коровы пробежали 6 единиц расстояния, затем бежали вместе в течение одной единицы времени. Беси затем вырвалась вперед (первое изменение лидерства), затем ее обошла Беси (второе изменение лидерства), Беси так и осталась лидером до конца гонки.

Partitioning the Farm

Бинарный поиск по ответу жадные алгоритмы Задачи на моделирование


Ферма Джона разделена на N x N квадратов пастбищ (2<=N<=15). Снаружи есть изгородь, но между пастбищами коровы могут переходить свободно.
ФД решил построить изгороди, чтобы отделить коров друг от друга. Каждая изгородь может быть горизонтальной или вертикальной через всю ферму, и изгороди не могут проходить через пастбища. По финансовым соображениям ФД может построить не более чем K изгородей (1 <= K <= 2N - 2).
ФД хочет построить изгороди так, чтобы минимизировать размер наибольшей из получившихся в результате групп коров (две коровы находятся в одной группе, если они могут посетить друг друга, не пересекая никакую изгородь).
По заданным количествам коров на пастбищах, вычислите размер наибольшей группы коров, если ФД построит изгороди оптимально.

PROBLEM NAME: partition
Формат входных данных
* Строка 1: Два целых числа, N and K
* Строки 2..1+N: Имеется N чисел на каждой строке, описывающих количества коров в каждом пастбище одной строки фермы. На каждом пастбище не менее 0 и не более 1000 коров.


Формат выходных данных
* Строка 1: Минимально возможный размер наибольшей группы коров.
Примечание
ФД должен построить изгороди между колонками 2 и 3 и между строками 2 и 3. В результате получится 4 группы по 4 коровы в каждой.

The Bessie Shuffle

Задачи на моделирование

Беси тренируется делать карточные трюки. Она уже освоила уникальный
способ тасования M (2 <= M <= 100,000) карт так, чтобы i-ая карта сверху
становилась p[i] картой сверху.

Теперь она переходит в бОльшим колодам.
У Беси имеется колода из N карт (M<=N<=100,000), последовательно
пронумерованных 1..N. Она тасует её следующим образом: берёт первые M
карт и выполняет описанное выше тасование. И возвращает эти M карт
наверх колоды. Затем она забирает верхнюю карту из колоды и размещает
её значением вниз. Она продолжает этот процесс, выкладывая верхние
карты последовательно поверх друг друга, пока у неё не закончатся карты.
Когда у Беси становится карт меньше чем M, она больше не выполняет
тасование, но размещать верхнюю карту поверх ранее выложенных.

Беси знает, что изначально колода находится в отсортированном порядке с 1
наверху, потом 2 и т.д. N в конце. Вам задано описание тасования Беси.
Помогите Беси вычислить, какие карты окажутся на Q (1 <= Q <= N,
Q <= 5,000) указанных различных позициях в колоде.

PROBLEM NAME: shuffle

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

* Строка 1: Одна строка, содержащая N, M Q разделённые одиночными
пробелами

* Строки 2..1+M: Строка i+1 указывает позицию сверху P[i], i-ой карты в
тасовании Беси (1 <= P[i] <= M).

* Строки 2+M..1+M+Q: Строка i+1+M содержит одно целое число qi
Описывающее i-ый запрос. Вы должны вычислить значение карты
неа позиции qi сверху (1 <= qi <= N).

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

* Строки 1..Q: В i-ой строке, выведите одно целое число – значение карты
на позиции qi сверху колоды по завершению процесса.

Примечание

Процесс протекает следующим образом

[1, 2, 3, 4, 5] -> [2, 3, 1, 4, 5] (выложить 2 значением вниз)
[3, 1, 4, 5] -> [1, 4, 3, 5] (выложить 1 значением вниз)
[4, 3, 5] -> [3, 5, 4] (выложить 3 значением вниз)
[5, 4] (выложить 5 значением вниз)
[4] (выложить 4 значением вниз)

Итого финальный порядок такой [4, 5, 3, 1, 2]

Unlocking Blocks (Silver)

Обход в ширину графы Задачи на моделирование


Коровы любят головоломки. Фермер Джон подарил Беси на день рождения новую головоломку. Она состоит из трех твердых объектов, каждый из которых состоит из склеенных вместе квадратиков размера 1 х 1. Каждый из этих объектов имеет «связную» форму в том смысле, что Вы можете перейти из одного квадратика в любой другой, двигаясь по квадратикам этого объекта в одном из четырех направлений: север, юг, запад, восток.
Объект может перемещаться последовательно скольжением на одну единицу в одном из четырех направлений: север, юг, запад, восток. Цель головоломки - переместить объекты так, чтобы они разделились – то есть, чтобы граничные квадратики отошли друг от друга. Ваша задача – по заданным трем объектам определить, можно их разделить, или нет. Конфигурация, которую разделить нельзя, называется заблокированной.

Замечание: программы, которые не делают ничего, кроме угадывания ответа, могут быть дисквалифицированы.
PROBLEM NAME: unlock
Формат входных данных
* Строка 1: Три разделенных одиночными пробелами целых числа: N1, N2, and N3, описывающих количество квадратов соответственно в фигурах 1, 2, и 3.
* Строки 2..1+N1: Каждая из этих строк описывает (x,y) координату юго-западного угла одного квадрата объекта 1. Все координаты в интервале 0..9.
* Строки 2+N1..1+N1+N2: Каждая из этих строк описывает (x,y) координату юго-западного угла одного квадрата объекта 2. Все координаты в интервале 0..9.
* Lines 2+N1+N2..1+N1+N2+N3: Каждая из этих строк описывает (x,y) координату юго-западного угла одного квадрата объекта 1. Все координаты в интервале 0..9.
Формат выходных данных
* Строка 1: Минимальное количество шагов, которое необходимо выполнить, чтобы разделить три объекта или -1, если объекты не могут быть разделены.
Примечание
Если мы сдвинем объект 3 на 4 позиции на восток, а затем объект 2 на одну позицию на север и затем на 3 позиции на восток, то границы трех фигур разъединятся.

Wrong Directions

Задачи на моделирование


Фермер Джон купил программируемый трактор. Чтобы заставить трактор двигаться, он пишет строку длиной N (1 <= N <= 100,000), состоящую только из символов F, L, R. Символ 'F' заставляет трактор двигаться на единицу вперед, символы 'L' и 'R' заставляют трактор повернуться на 90 градусов влево или вправо, соответственно. Трактор начинает движение в точке (0,0) глядя на север.
ФД знает, что он ошибся ровно в одном символе. Например, он мог набрать 'F' или 'L' вместо 'R' в некотором месте. Но он не помнит точно в каком месте он ошибся.
Пожалуйста, вычислите количество различных точек на плоскости, в которых может оказаться трактор в результате выполнения этой программы (направление в конечной позиции не играет роли).
PROBLEM NAME: wrongdir
Формат входных данных
* Строка 1: Строка ФД

Формат выходных данных
* Строка 1: Количество позиций, в которых может оказаться трактор, если ФД ошибся в каком-то одном символе.
Примечание
Всего имеется 4 возможных ошибочных последовательности: FL, FR, LF, RF.
И при их выполнении трактор оказывается в точках (0,1), (0,1), (-1,0), (1,0) соответственно. Всего 3 различных точки.

Rope Folding

Задачи на моделирование


У Фермера Джона есть длинная веревка длины L (1 <= L <= 10,000), которую он использует на ферме. На веревке завязаны N (2 <= N <= 100) узлов на различных расстояниях, в том числе на обоих концах.
ФД заметил, что имеются определенные точки на веревке, в которой он может перегнуть веревку назад, так что узлы на обоих частях веревки станут точно рядом друг с другом.

Пожалуйста, помогите ФД посчитать количество точек перегиба, в которых соблюдается это свойство. Допускается складывание веревки в любом из узлов (кроме начала и конца веревки). Лишние узлы на более длинной части веревки не принимаются во внимание (то есть необходимо обеспечить выравнивание узлов в области, где есть обе части веревки). Делать можно только одно складывание за один раз. ФД не умеет складывать веревку много раз.
PROBLEM NAME: folding
Формат входных данных
* Строка 1: Два разделенных пробелом целых числа, N и L.
* Строки 2..1+N: Каждая строка содержит одно целое число в интервале 0...L Указывающее расположение одного узла. Две из этих строк будут всегда 0 и L.
Формат выходных данных
* Строка 1: Количество корректных позиций перегиба веревки.
Примечание
Корректные позиции перегиба 1, 2, 3, 8.

Meet and Greet

Задачи на моделирование


Коровы очень вежливы, каждый раз при встрече они приветствуют коллегу дружеским 'moo'.
Бэси и Эльза ходят вдоль прямой вперед и назад. Начинают в точке 0 и двигаются с одинаковой скоростью. По описаниям движения каждой из коров определите количество 'moo', которыми они обменялись.
Беси и Эльза могут останавливать движение в различные точки времени, и никогда не гуляют более чем 1,000,000 единиц времени.
PROBLEM NAME: greetings
Формат входных данных
* Строка 1: Два разделенных пробелом целых числа, B (1 <= B <= 50,000) и E (1 <= E <= 50,000).
* Строки 2..1+B: Эти B строк описывают движение Беси. Каждая строка содержит положительное целое, за которым следует символ "L" или "R", обозначающий пройденное Беси расстояние влево или вправо.
* Строки 2+B..1+B+E: Эти E строк описывают движение Эльзы. Каждая строка содержит положительное целое, за которым следует символ "L" или "R", обозначающий пройденное Эльзой расстояние влево или вправо.
Формат выходных данных
* Строка 1: Одно целое число, указывающее количество 'moo', которыми обменялись две коровы. Их начальное совместное положение в точке 0, не вызывает 'moo'.
Примечание
Беси и Эльза встречаются в моменты времени 7, 9, 13

Расчистка дороги

Задачи на моделирование Простые задачи на перебор

Шарик и Матроскин чистят дорогу от снега. Дорога разделена на N участков. Для каждого участка известно, сколько минут нужно на его расчистку. Друзья договорились: Шарик чистит первые несколько участков с начала, а Матроскин — оставшиеся с конца. Нужно разделить работу так, чтобы максимальное время работы (у того, кто работает дольше) было минимальным.

Входные данные: В первой строке число N (2 ≤ N ≤ 10). Во второй строке N положительных целых чисел, не превышающих 1000, — время расчистки каждого участка.

Выходные данные: Минимально возможное значение максимального времени работы.

Светофор

Вычисление по заданной формуле Задачи на моделирование

Студент Павел недавно приобрёл себе подержанный автомобиль и теперь ездит на нём в университет. На его пути в вуз имеется один загруженный перекрёсток, проезд через который регулируется светофором. Сделав ряд поездок, Павел обнаружил интересную закономерность: пока на светофоре горит зелёный свет, через перекрёсток успевает проехать не менее a, но не более b машин. Сверху над перекрёстком установлена уличная видеокамера. Павел может подключиться к ней со своего смартфона и сосчитать количество машин n, которые стоят перед светофором впереди него (свою машину он тоже считает). Назовём тактом светофора включение на нём зелёного сигнала. Напишите программу, определяющую минимальный и максимальный номер такта, на котором Павел проедет перекрёсток.
Формат входных данных
Впервых двух строках входных данных записаны целые числа a и b (1 ≤a ≤ b ≤ 109). В третьей строке записано целое число n (1≤ n ≤ 109).
Формат выходных данных
Выведите два целых числа минимальный и максимальный номер такта светофора, на котором Павел проедет перекрёсток.

Замечание
В примере из условия перед светофором стоят 10 машин. Если через перекрёсток будут проезжать по 5 машин на зелёный свет, то Павел проедет на втором такте. Если же будут проезжать по 3 машины, то он проедет лишь на четвёртом такте.

66861

Вычислительная геометрия Задача на реализацию Задачи на моделирование

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

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

Результатом успеха Оля считает тот случай, когда лазер в следствие отражений попал в результирующую точку, которую Оля заранее знает, но так как лазер имеет батарейку, которая быстро садится, она просит Вас помочь ей заранее определить, будет ли успешным её текущая конструкция.
Для удобства расчётов Оля гарантирует, что точка пересечения луча со сторонами металлических коробов будет всегда целым числом, а стороны короба будут параллельным осям OY и OX.
Входные данные
В первой строке подаются два числа:

  •  направление лазера, находящегося в начале координат, в виде угла наклона кратного 45 градусам (угол считается против часовой стрелке) (положительное направление оси OX равно 0 градусов, а положительное направление оси OY равно 90 градусам) (угол от 0 до 315 градусов);
  •  интенсивность света лазера в нановаттах (целое число от 100 до 5000).
  • На второй строке подаётся число N (1 <= N <= 20) – количество металлических коробов (параллелепипедов), которые Оля хочет установить. Далее на N строках подаются через пробел параметры каждого короба:
  •  координаты левого верхнего угла, координаты правого нижнего угла короба (целые числа в диапазоне [-100;100]);
  •  процент поглощения света (вещественное число в диапазоне [0; 100]).
На последней строке входных данных подаются координаты результирующей точки (целые числа в диапазоне [-100;100])

Выходные данные
Вывести в ответе в случае успеха конструкции интенсивность (только целую часть), с которой луч лазера попадёт в результирующую точку.
Если конструкция не успешна (лазер поглотился более чем на 90% от начальной интенсивности), то вывести координаты первого короба на пути лазерного луча, при отражении от которого интенсивность стала меньше 10% от начального) с указанием полученной интенсивности (только целую часть) (вывод через пробел – координаты левого верхнего угла, правого нижнего, (в том порядке, в котором короб был введена в программу), затем полученная интенсивность).
Гарантируется, что лазер не может улететь в бесконечность, то есть результатом может быть либо поглощение луча, либо попадание в результирующую точку.

66860

Задача на реализацию Задачи на моделирование

Компания “РудниК” хочет построить автономный рудодобывающий городок и ей необходимо рассчитать хватит ли её новому городу припасов на автономное существование в течении 100 месяцев. Для автономного существования городу необходимы: токарные изделия, электронные платы, бетон и еда. Изначально в городке находится по 30 единиц каждого ресурса. Каждые 10 месяцев в городок приходит по X единиц каждого ресурса. То есть при наступлении 10-го, 20-го, 30-го месяца и так далее. Чтобы автономно существовать без построек город потребляет по Y единицы каждого ресурса за месяц. Потребление ресурса происходит после поступления ресурсов с заводов и других источников. Если в какой-то месяц один из ресурсов кончится (станет равным 0 или меньше 0), то город закроют, а жителей вывезут. Рудодобывающий город начинает свой отсчёт с дня №1. Администрация города может строить здания, чтобы производить ресурсы самостоятельно:

  • - завод по переработке отходов. Стоимость 8 токарных изделий, 3 электронные платы, 10 бетона. Время строительства 5 месяцев. Каждые 2 месяца завод будет выдавать 5 бетона и 2 токарных изделия. Потребляет 3 токарных изделия каждые 5 месяцев. ID завода - 1.
  • - теплица. Стоимость 8 бетона и 5 токарных изделий. Время строительства 5 месяцев. Каждые 5 месяцев теплица будет приносить 7 еды. Потребляет 2 бетона каждые 10 месяцев. ID завода - 2.
  • - завод по производству электроники. Стоимость 6 электронных плат, 10 токарных изделий, 10 бетона. Время строительства 10 месяцев. Каждые 10 месяцев будет выдавать по 6 электронных плат. Потребляет 2 токарных изделия каждые 18 месяцев. ID завода - 3.
  • - завод по производству бетона. Стоимость 4 электронные платы, 8 токарных изделий, 8 бетона. Время строительства 8 месяцев. Каждые 8 месяцев будет выдавать по 8 бетона. Потребляет 1 токарное изделие и 1 электронную плату каждые 12 месяцев. ID завода - 4.
Завод начинает приносить доход или начинает вести отсчёт до выдачи новых ресурсов на следующий месяц после завершения его постройки или прошлой выдачи ресурсов. Если завод приносит ресурсы на n-ый месяц, на следующий n+1 месяц начинается отсчёт прихода ресурсов в новом цикле. Представим, что теплица начнёт строительство в 5-ый месяц, значит её строительство завершится на 9-ый месяц, производить ресурсы она будет с 10-го месяца, а первый “урожай” будет собран на 14-ый месяц. Администрация города может построить несколько заводов, если у неё хватает на это ресурсов. Можно начать строительство завода только, если на момент начала строительства все ресурсы есть в наличии. Месяц начала строительства завода полностью учитывается во времени его строительства. Только разные заводы/строения могут строится одновременно. Эффекты от нескольких заводов складываются.

Формат входных данных
На вход программа получает 2 числа 0<=X<=40, 1<=Y<=40, количество ресурсов, которые колония получается и тратит соответственно. И двумерный массив (каждый элемент на новой строке), размером 4 на 5, указывающий в какой месяц должно начаться строительство того или иного здания. Где по вертикали - ID строения/завода, а по горизонтали номер планируемой к строительству постройки. Каждую постройку могут построить максимально 5 раз. Если в столбце строения указано число 0, значит завод/строение не строится.

Формат выходных данных
На выходе программа должна выдать количество месяцев, которые город смог самостоятельно себя обеспечивать, если он просуществовал 100 месяцев, значит город признан успешным. На следующих строках вывести остаток ресурсов на момент завершения расчётов, не важно успешных или неуспешных. Числа могут принимать отрицательные значения.
Строка 1: Кол-во прожитых месяцев; 2: Токарных изделий; 3: Электронных плат; 4:Бетона; 5:Еды.

66451

Задачи на моделирование Алгоритмы обработки

Глеб очень любит компьютерные игры, потому решил впервые разработать свою игру. Он начал с чего-то максимально простого – матричного пинг-понга. Первым этапом Глеб решил сделать алгоритм, который будет считать количество набранных очков мячиком, который будет запускаться в матрице, состоящей из целых чисел.
Для того, чтобы протестировать алгоритм, Глеб указывает стартовую позицию мячика и его стартовое направление (число от 1 до 8). Мячик после прохождения через ячейку матрицы оставляет на её месте дыру, при попадании в будущем в которую игра заканчивается.
Стоит также учесть, что так как это пинг-понг, то мячик отталкивается от стенок, но в данной игре отражение действует по принципу угол отражения равен углу преломления + 45 градусов по часовой стрелке (при попадании в угол мячик отталкивается в обратном направлении + 45 градусов). Если мячик попадает в угол под углом 45 градусов, то он отражается обратно вектору попадания.
Стартовое направление мячика задаётся числом от 1 до 8. Направления представлены в виде матрицы ниже, где x – это текущая позиция мячика.

1 2 3
4 x 5
6 7 8

Входные данные
В первой строке подаются два числа N, M (1 <= N, M <= 100) – размер матрицы, далее на N строках по M целых чисел (от -10000 до 10000) вводится сама матрица. После вводится на одной строке стартовая позиция мячика (нумерация в матрице с 1), а на последней строке вводится стартовое направление мячика (число от 1 до 8).
Выходные данные
Вывести в ответе единственное число – количество набранных очков мячиком после старта.

Примечание
Пример №2: При старте из ячейки -5 по направлению 8 (в правый нижний угол), мячик ударится в угол, значит он должен отразиться в обратном направлении, но так как к углу отражения по правилам игры прибавляется 45 градусов по часовой стрелке, то мячик полетит по направлению не 1 (в левый верхний угол), а по направлению 2 (вверх). Далее отразится в обратном направлении от верхней стенки и попадёт в ячейку -5, на месте которой уже осталась дыра, потому игра окончится.
 

66402

Задачи на моделирование Линейные алгоритмы

Риэлторская фирма “КвартирКа” решила добавить в своё приложение кредитный калькулятор для своих клиентов. На время тестирования нового обновления калькулятор был сделан более простым.

Формат входных данных
На входе программа получает ряд натуральных целых чисел, разделённых переносом строки: сумма кредита (10000<=x<=999999999), процентная ставка (годовая) ( 1<=x<=100), планируемая сумма для ежемесячного погашения кредита (10000<=x<=999999999).
Формат выходных данных
На выходе программа должна выдать возможно ли выплатить кредит по представленным параметрам в виде: “True” - если возможно, “False” - если невозможно и на следующей строке количество месяцев необходимое для выплаты кредита, если кредит выплатить невозможно следует вывести ноль.

Правила расчёта кредита: процентная ставка начисляется каждые 12 (и в момент взятия кредита) месяцев на остаток по кредиту. Затем в первую очередь клиент ежемесячно гасит задолженность по процентам, а потом по самому кредиту. Если за год (12 месяцев) клиент не может погасить задолженность по процентам, то такой кредит невозможно выплатить или срок погашения кредита превышает 600 месяцев. Затем клиент начинает гасить задолженность по самому кредиту. Процент на остаток по кредиту будет начисляться каждый 12-ый месяц, выплата этих процентов будет начинаться со следующего за ним.

Пример: сумма кредита - 50.000, процентная ставка 50%, планируемая сумма погашения 10.000. В первый месяц будут начислены процента на долг, который составит 25.000. В первый месяц вся сумма пойдёт на погашения процентов 25.000-10.000. Во второй месяц, аналогично 15.000-10.000. В третий месяц 5.000 уйдёт на погашение долга по процентам и 5.000 на погашение задолженности, остаётся выплатить 45.000. В четвёртый месяц 45.000-10.000. В пятый 35.000-10.000. В шестой 25.000-10.000. В седьмой 15.000-10.000. На восьмой месяц кредит будет полностью погашен, так как не было набрано 12 месяцев проценты более не начислялись.

66153

Задача на реализацию Задачи на моделирование реализация

Иван Фёдорович сыщик с очень большим стажем. Однажды в городе произошла серия больших ограблений. На местах ограбления не было обнаружено ни улик, ни зацепок. Однажды грабителей практически застали врасплох, но они смогли скрыться. На месте преступления Иван Фёдорович заметил, что грабители обронили папку с листком и набором картонных карточек, с вырезанными окошками на этих картах. Придя в офис и рассмотрев улики подробнее, было замечено, что на листке напечатана прямоугольная матрица, состоящая из цифр, а карточки все были размером с матрицу, притом отверстия, вырезанные в карточках, отображали какие-то случайные цифры из матрицы.
Иван Фёдорович вспомнил, что когда-то сталкивался с подобной схемой обозначения мест ограбления, что карточки помогали определить координаты следующего места ограбления. Потому Иван Фёдорович решил выписать координаты всех мест преступлений в виде долготы и широты, а далее найти карточки, которые соответствуют координатам следующих мест преступлений.
Помогите ему быстрее найти преступников, определив координаты следующих мест преступлений.
Координаты преступления собираются при помощи карточки следующим образом:

  • на матрицу накладывается карточка;
  • далее двигаясь по каждой строке по порядку слева-направо, выписываются цифры, которые попали в прорези;
  • цифр всегда 18, притом координаты всегда состоят из 8цифр (две целой части, шесть вещественной), значит два символа игнорируются и обозначают точку в вещественном числе в соответствующем порядке.
Пример матрицы и карточки (где белые участки – это вырезы (отверстия)).

Таким образом начинаем выписывать цифры по строкам слева-направо: 554755831378617673. Знаем, что цифр обозначающих координату 8, а две лишние – обозначающие запятые, получим координаты 55.755831 37.617673.
Также на каждой карточке Иван Фёдорович заметил на углу пометку, которая, как позднее он понял, определяет, как должна быть развёрнута карточка, так как метка должна при наложении всегда находиться в левом верхнем углу при взгляде на неё:
  • 1 – метка в левом верхнем углу карточки;
  • 2 – метка в правом верхнем углу карточки;
  • 3 – метка в правом нижнем углу карточки;
  • 4 – метка в левом нижнем углу карточки.
Входные данные
на первой строке подаётся целое число K (2 <= K <= 100) – количество преступлений, которые совершили грабители;
далее на K строках подаются координаты предыдущих мест преступлений в виде вещественных чисел с точкой, разделённых пробелом (например, 55.755831 37.617673)
на следующей строке подаются размеры матрицы и карточек в виде целых чисел N, M (5 <= N,M <= 1000), где N – количество строк матрицы, а M – количество столбцов;
далее на N строках подаются по M цифр матрицы;
после подаётся на новой строке целое число – количество карточек L (K < L <= 100); 
далее подаётся на одной строке L цифр от 1 до 4 через пробел, которые отображаются метки карточка в соответствии с порядком их появления;
затем L раз по N строк и M цифр подаются карточки по порядку их появления, которые содержат либо цифру 1 – обозначающую наличие прорези на ней, либо 0 – если прорези в этом месте на карточке нет.
Выходные данные
выведите все координаты будущих мест преступлений (каждую с новой строки), отсортировав их по возрастанию (если две координаты одинаковые по первой координате, то сортировать по возрастанию по второй), координаты одного места выводить через пробел.
Примечание:
·при выводе дробной части координат выводить всегда 6 знаков, если знаков меньше, то дополнять их незначащими нулями;
·если матрица прямоугольная, то гарантируется, что при совмещении метки на карточке с левым верхним углом матрицы, карточка совпадёт с размером матрицы;
·данные на карточках нельзя отзеркаливать (переворачиватькарточки не в плоскости OXY);
·гарантируется, что если даны метки на карточках, то при повороте карточка совпадёт с размером матрицы, не будет такого, что карточка будет иного размера, чем матрица.

66149

Задачи на моделирование Очередь

В маленьком городе N, где нет ни интернета, ни телефонов, живут лучшие друзья Коля, Маша, Саша и Наташа. В очередной зимний день им очень хотелось провести время, играя в какую-нибудь игру, но такую, чтобы игра была не очень быстрой. Потому Маша предложила ребятам сыграть в своего рода модифицированную карточную версию игры «Пьяница» под названием «Круговерть_2».
Правила игры оказались следующими:

  • ·игрокам заранее раздают поровну перетасованную колоду из52 карт (четыре масти: червы, бубны, трефы, пики, в каждой из которых 13 карт), таким образом у каждого игрока оказывается своя колода карт, стоящая в виде стопки, расположенной рубашкой вниз;
  • ·каждый ход игроки выкладывают на стол по одной картесверху своей колоды на стол, по порядку слева-направо (первый игрок, второй игрок, третий и четвёртый), далее происходит определение победителей:
  •     - если карты одной масти, то побеждает тот, у кого картабыла наибольшего значения (порядок карт в порядке их значения по возрастанию: туз, 2-10, валет, дама, король); туз - самая слабая карта;
  •     - если карты разных мастей, то побеждает тот, у когомасть выше по значению (порядок мастей по возрастанию: червы, бубны, трефы, пики);
  •     - если карт высшей масти несколько, то рассматриваетсяопределение наибольшего значения среди этих карт (например, выложили 10 червы, 8 бубны, 7 трефы, 8 трефы, то карты разных мастей, потому выбирается наибольшая масть – в данном случае трефы, таких карт две, среди них самая наибольшая 8 трефы, потому побеждает игрок 4);
  • ·победитель забирает четыре карты в свою колоду по порядку,кладя сперва карту первого игрока под низ колоды, затем второго, третьего, четвёртого;
  • ·побеждает тот игрок, который заберёт все картыпротивников.
Коля очень любит программирование, потому он решил заранее рассчитать, сколько им понадобится ходов, чтобы был определён победитель (у кого будут все 52 карты), потому ему требуется помочь написать программу, которая по входным данным игры определит через сколько ходов будет определён победитель игры. Если же за 1000 ходов победитель так и не определится, то вывести, сколько карт оказалось у первого игрока, у второго, третьего, четвёртого.
Входные данные:
на первых 13 строках подаются карты первого игрока (в порядке их нахождения в стопке карт),
далее на 13 строках подаются карты второго игрока (в порядке их нахождения в стопке карт),
далее на 13 строках подаются карты третьего игрока (в порядке их нахождения в стопке карт),
далее на 13 строках подаются карты четвёртого игрока (в порядке их нахождения в стопке карт).
Все карты подаются в формате <масть>, <значение>.
Масти обозначаются следующим образом (одна латинская буква в нижнем регистре):
  • c – червы;
  • b – бубны;
  • t – трефы;
  • p – пики.
Значения карт с картинками обозначаются следующим образом (одна латинская буква в нижнем регистре):
  • t – туз;
  • v – валет;
  • d – дама;
  • k – король.
Например:
  • (t,10) – десятка треф;
  • (c, t) – туз червей.
Выходные данные:
Если за 1000 ходов (включительно) кто-то победит, то вывести количество ходов и номер победившего игрока (например, 340 2, что означает, что за 340 ходов победил игрок №2).
Если за 1000 ходов (включительно) минимум у двух игроков останутся карты (никто не победит), то вывести количество карт по завершении 1000-го хода у первого игрока, у второго, у третьего, у четвёртого на одной строке через пробел (например, 48 3 1 0).
Примечание
•карты перечисляются в вводе так, как они лежат сверху-вниз,если сперва дали туз, затем 10, то на дне колоды лежит 10, а на верху туз, который будет вытащен первым.

66148

Задачи на моделирование Очередь

В маленьком городе N, где нет ни интернета, ни телефонов, живут лучшие друзья Коля и Маша. В очередной зимний день им очень хотелось провести время, играя в какую-нибудь игру, но такую, чтобы игра была не очень быстрой. Потому Маша предложила Коле сыграть в своего рода модифицированную карточную версию игры «Пьяница» под названием «Круговерть».
Правила игры оказались следующими:
·игрокам заранее раздают поровну перетасованную колоду из52 карт (четыре масти: червы, бубны, трефы, пики, в каждой из которых 13 карт), таким образом у каждого игрока оказывается своя колода карт, стоящая в виде стопки, расположенной рубашкой вниз;

  • каждый ход игроки выкладывают на стол по одной картесверху своей колоды на стол, далее происходит определение, кто заберёт карты:
               - если карты одной масти, то забирает карты тот, у когокарта была наибольшего значения (порядок карт в порядке их значения по возрастанию: туз, 2-10, валет, дама, король); туз - самая слабая карта; 
               - если карты разных мастей, то забирает карты тот, у когомасть выше по значению (порядок мастей по возрастанию: пики, червы, бубны, трефы);
  • забирающий карты забирает обе карты в свою колоду, кладясперва карту противника под низ колоды, затем свою карту также под низ колоды; 
  • побеждает тот игрок, который останется без карт.
Коля очень любит программирование, потому он решил заранее рассчитать, сколько им понадобится ходов, чтобы был определён победитель (у кого не будет карт), потому ему требуется помочь написать программу, которая по входным данным игры определит через сколько ходов будет определён победитель игры. Если же за 1000 ходов победитель так и не определится, то вывести, сколько карт оказалось у первого игрока и сколько у второго.
Входные данные:
на первых 26 строках подаются карты первого игрока (в порядке их нахождения в стопке карт),
далее на 26 строках подаются карты второго игрока (в порядке их нахождения в стопке карт).
Все карты подаются в формате <масть>, <значение>.
Масти обозначаются следующим образом (одна латинская буква в нижнем регистре):
  • c – червы;
  • b – бубны;
  • t – трефы;
  • p – пики.
Значения карт с картинками обозначаются следующим образом (одна латинская буква в нижнем регистре):
  • t – туз;
  • v – валет;
  • d – дама;
  • k – король.
Например:
  • (t,10) – десятка треф;
  • (c, t) – туз червей.
Выходные данные: 
Если за 1000 ходов (включительно) кто-то победит, то вывести количество ходов и номер победившего игрока (например, 340 2, что означает, что за 340 ходов победил игрок №2).
Если за 1000 ходов (включительно) у всех останутся карты (никто не победит), то вывести количество карт по завершении 1000-го хода у первого игрока и у второго на одной строке через пробел (например, 50 2).
Примечание
•карты перечисляются в вводе так, как они лежат сверху-вниз,если сперва дали туз, затем 10, то на дне колоды лежит 10, а на верху туз, который будет вытащен первым.

65997

Клеточная геометрия Задачи на моделирование реализация

Город имеет форму прямоугольника с вершинами в точках (-W,-H), (-W,H), (W,H),(W,-H).
Плоскость разбита на кварталы. Квартал — это единичная клетка, вершины которой имеют целочисленные координаты. Назовем квартал городским, если все вершины квартала находятся внутри города (считается, что точка на границе принадлежит городу). Всего в городе будет 4·W·H кварталов.
Дорожная сеть состоит из N дорог (часть дорог или все проходят через город).
Дорога — это прямая линия, не параллельная осям координат.
Дорога задается двумя различными точками на ней (точки могут находиться вне города).
Для каждого квартала определим "значимость". Значимость квартала равна количеству дорог, проходящих через этот квартал. Считается, что дорога проходит через квартал, если имеет с кварталом не менее двух общих точек.
Найдите значение "значимости" для каждого квартала. Для каждой полученной "значимости" определите количество кварталов, имеющих эту значимость.

Формат входных данных
В первой строке заданы значения W, H, N (9<W,H<201, 0<N<1001)
В следующих N строках задано по четыре числа (координаты двух точек прямой, определяющих дорогу).

Формат выходных данных
В первой строке выведите число K - количество различных ненулевых значений "значимости".
В следующих K строках выведите по два числа - значение "значимости" и количество кварталов, имеющих такое значение "значимости".


Примечание к примеру

Город расположен в прямоугольнике со сторонами 8 и 6 клеток (всего 48 кварталов)
Через город проходят 4 дороги AB, CD, EF, GH
Значимость 1 будет у 24 кварталов (коричневый цвет на рисунке)
Значимость 2 будет у 5 кварталов (зеленый цвет на рисунке)
Значимость 4 будет у 1 кварталов (красный цвет на рисунке)
18 кварталов будут иметь значимость равную 0 (на печать не выводиться)

65983

Алгоритмы обработки Задачи на моделирование

Химики смешивают несколько добавок к топливу и проверяют, при какой температуре смесь превысит заранее заданное давление. Для этого смесь нагревают в химическом реакторе. Лаборант, которого оставляют следить за реактором, пишет в текстовый файл температуру смеси, которую измеряет раз в минуту. Когда давление превышает заданное значение, процесс прекращается, реактор охлаждают и загружают новую смесь. Определите, сколько длился самый долгий нагрев смеси. При нагреве, что очевидно, температура смеси не уменьшается.

Формат ввода
На вход программе в первой строке подается натуральное число N, не превышающее 10000 – количество замеров температуры.
Во второй строке подается натуральное число X, не превышающее 1000 – пороговое значение температуры.
Далее в N строках подается по одному натуральному числу ti, не превышающему 1000 – температура смеси при измерении номер i.
Формат вывода
Вывести одно целое число – сколько минут длился самый длительный нагрев смеси.

65982

Задачи на моделирование Задача на реализацию

Электронная схема состоит из элементов И и НЕ.
Элемент НЕ имеет один вход и один выход. Принцип его работы следующий: если на входе появится сигнал 0, то через 1 мс на выходе установится сигнал 1, а если на входе 1, то через 1 мс на выходе установится сигнал 0.
Элемент И имеет два входа и один выход. Если на обоих его входах появится сигнал 1, то через 1 мс на выходе установится сигнал 1. Если хотя бы на один из входов поступает 0, то через 1 мс на выходе устанавливается сигнал 0.
Все точки подсоединения элементов пронумерованы. Если в точку поступает сигнал с выходов нескольких элементов, то в этой точке сигнал равен 0 тогда, когда со всех выходов поступает сигнал 0. Если с одного или нескольких выходов, подсоединенных в одной точке, поступает сигнал 1, то в этой точке устанавливается сигнал 1. В последних двух случаях сигнал устанавливается мгновенно (без задержки).
Известно состояние (сигнал 0 или 1) каждой точки в момент включения схемы. Необходимо выдать состояние некоторой указанной точки К в течение первых T мс с момента включения схемы.
В точках, которые соединены только с входами элементов, сигнал остается неизменным с момента включения схемы до окончания ее работы.
Формат ввода
На вход программе в первой строке подаётся натуральное число N. Далее идет N строк, каждая из которых содержит несколько целых десятичных чисел, отделенных друг от друга одним или несколькими пробелами. Первое число в строке показывает, что именно описывают оставшиеся числа данной строки:
0 - описание точки соединения;
   0 m n - точка с номером m имеет в момент включения состояние n (0 или 1)
1 - описание элемента НЕ;
   1 x y - элемент НЕ, вход которого соединен с точкой под номером x, а выход - с точкой под номером y
2 - описание элемента И;
   2 x y z - элемент И, один вход которого соединен с точкой под номером x, второй вход соединен с точкой под номером y, а выход - с точкой под номером z
3 - описание задания.
   3 K T - необходимо выдать состояние точки K в течение первых T мс с момента включения схемы.
Формат вывода
T строк: первая строка - состояние точки K в первую мс, вторая строка - состояние точки K во вторую мс, и так далее до T мс.

Пример
Пусть имеется схема, приведенная на рисунке. Необходимо выдать состояние точки 3 в течение 5 мс с момента включения схемы.

65821

Разные системы счисления Задачи на моделирование

Станция связи принимает блоки сообщений. Каждое сообщение представляет собой последовательность кодовых сигналов. Всего сигналов 26; они перечислены в блоке как цифры числа, записанного в системе с основанием 26.Обработка некоторых кодовых сигналов требует участия операторов;значения таких сигналов кратны 6. На вход подаётся N чисел, записанных вдесятичной системе счисления – блоков сообщений. Определите, в сколькихблоках оказалось менее M1 или более M2 команд, требующих участияоператоров.

Формат входных данных
На вход программе в первой строке подается натуральное число N (N ≤ 10000) – количество блоков сообщений. Во второй строке подаются два целых неотрицательных числа M1 и M2 (0 ≤ M1 ≤ M2 ≤ 1000) – ограничение по количеству кодовых сигналов, требующих обработки оператором. Далее в N строках на вход подаётся по одному целому числу в диапазоне от 0 до 4*109 – блок сообщений, записанных в десятичной системе счисления.
Формат выходных данных
Вывести одно целое число – в скольких блоках оказалось менее M1 или более M2 команд, требующих участия операторов.

65819

Задача на реализацию Задачи на моделирование

Находясь в агрессивной среде аппарат, снабженный целым комплексом датчиков, мониторит сразу несколько параметров. Необходимо написать программу анализа для параметра F. Этот параметр принимает целые значения. Задан диапазон допустимых значений [X; Y] (границы отрезка тоже являются допустимыми значениями). Каждую минут снимаются показания с датчика F. После выключения оборудования датчик показывает 0. Это значение в серию измерений уже не включается. Необходимо посчитать наибольшее отклонение от допустимых значений и сколько раз за время наблюдения оно было зафиксировано.

Формат входных данных
На первых двух строчках вводятся два целых числа X и Y (X < Y), которые задают диапазон допустимых значений.
На последующих строчках вводятся целые числа (по одному в каждой строке) – показания параметра F, передаваемые аппаратом. Последнее значение 0 – признак выключения аппарата – это значение в показания НЕ включается.
Все числа по модулю не превосходят 1 000.
Гарантируется, что хотя бы один выход из допустимого диапазона значений был.
Формат выходных данных
Два целых числа в одной строке через пробел: максимальное отклонение и количество отклонений на такое значение за время наблюдения.

Примечание
В данном примере 11 измерений. Максимальное отклонение 2 от заданного допустимого диапазона [-4; 11] будет достигнуто 3 раза на значениях -6, 13 и 13
|-6 – (-4)| = |13 – 11| = 2

65816

Задачи на моделирование Задача на реализацию

В сказочном мире Геомаба живут необычные существа в виде прямоугольников. Все они разного размера, но передвигаются все они одинаково –перекатыванием сбоку на бок. В очередной из дней жители Геомаба решиливыбрать себе мэра, так как дороги в их мире очень опасные – в них очень многоям и в них легко застрять, так как жители-прямоугольники могут передвигатьсятолько по плоским дорогам.
Мэр решил незамедлительно собрать группу добровольцев и направить их по дорогам Геомаба, но дорог так много, что Мэр понял, что отправлять добровольцев, а потом вытаскивать их из ям – дело трудозатратное, потому он обратился к Вам за помощью – написать алгоритм, который по размеру прямоугольника покажет все ямы, которые необходимо залатать, чтобы житель-прямоугольник смог спокойно передвигаться по дороге, а город потратил минимально ресурсов (заделал как можно меньше ям).
Прямоугольник считается застрявшим, если он не смог беспрепятственно перекатиться через яму (его угол попал в яму (не включая начало и конец ямы)).
Если прямоугольник попал не углом в яму, а попал точно стороной на границы ямы, то он не считается застрявшим.

Формат входных данных
На вход на первой строке подаётся число X (1 <= X <= 100000) – длина дороги в метрах.
На второй строке подаются числа W, H (1 <= W,H <= 100) – высота и ширина жителя-прямоугольника в метрах соответственно.
На третьей строке подаётся число N (1 <= N <= 1000) – количество ям на дороге.
Далее на N-строках подаются координаты начала ямы (в метрах от начала дороги) и её ширина в виде целых положительных чисел от 1 до X. Координаты ям могут подаваться в любом порядке. Но все ямы не пересекаются и не накладываются.
Формат выходных данных
Выведите на первой строке количество ям, которые необходимо заделать, чтобы житель-прямоугольник, для которого производится расчёт, смог добраться до конца дороги.
Далее выведите координаты всех ям отсортированные в порядке появления от начала дороги до конца, КАЖДУЮ С НОВОЙ СТРОКИ.

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

В данном случае житель может стоять основанием перед началом дороги на стороне 2 (положение №1) или 3 (положение №2).
Если он стоит на основании длиной 2, то он попадёт только в яму под номером 14.
Если он стоит на основании длиной 3, то он попадёт в ямы 10 и 14.
Городу выгоднее заделать только одну яму, под номером 14.

Положение №1.


Положение №2.

 

65815

Задачи на моделирование Задача на реализацию

В школе №1920 решили провести соревнование по написанию небольших игр среди школьников. Первым критерием данного соревнования было условие того, что в игре нельзя заранее рассчитать результат зная входные данные.
Коля написал игру, в которой задаётся квадратная матрица, состоящая из целых чисел, но не содержащая нулей. Суть игры в том, что в неё играют два участника и каждый может сделать одно из следующих действий:
1.Повернуть матрицу на 90 градусов по часовой стрелке
2.Повернуть матрицу на 90 градусов против часовой стрелке
3.Повернуть матрицу на 45 градусов по часовой стрелке (если есть нули,то они схлопываются (см. пример))
4.Повернуть матрицу на 45 градусов против часовой стрелке (если естьнули, то они схлопываются (см. пример))
У игроков есть ограниченное чётное количество ходов. Каждый из игроков ходит по очереди. Победой в игре считается сумма чисел на ближайшей стороне матрицы, которая находится ближе к игроку. Если матрица в конце повёрнута на 45 градусов, то результатом берётся ближайший угол матрицы к каждому из игроков (одно число в вершине).
Помогите Коле написать алгоритм, который будет по входной матрице и порядку действий ребят определять сколько очков набрал игрок №1 и игрок №2.
Поворот квадратной матрицы на 45 градусов по часовой стрелке будет выглядеть следующим образом.

Формат входных данных
На вход первой строкой подаются число N (1 <= N <= 1000) – размер исходной сгенерированной квадратной матрицы (N – количество строк). Далее на N строках подаются по N целых чисел (кроме нуля).
Далее подаётся число K (2 <= K <= 100, K – чётное)– количество ходов у игроков.
На последующих K-строках вводятся команды, которые выбрали ребята (от 1 до 4), где первая команда соответствует первому игроку (сидящему слева), следующая команда второму (сидящему справа) и так далее.
Формат выходных данных
Вывести на одной строке через пробел результат игры для первого игрока и для второго.

Примечание:

1 2 3
4 5 6
7 8 9

1 команда (повернуть на 90 градусов по часовой стрелке)
7 4 1
8 5 2
9 6 3

2 команда (повернуть на 45 градусов по часовой стрелке)
0 0 7 0 0
0 8 0 4 0
9 0 5 0 1
0 6 0 2 0
0 0 3 0 0

3 команда (повернуть на 90 градусов по часовой стрелке)
0 0 9 0 0
0 6 0 8 0
3 0 5 0 7
0 2 0 4 0
0 0 1 0 0

4 команда (повернуть на 45 градусов против часовой стрелке (нули схлопываются))
9 8 7
6 5 4
3 2 1
Первый игрок находится слева, значит ячейки, которые идут ему в счёт 9 + 6 + 3.
Для второго игрока справа 7 + 4 + 1.
 

Обработка заявлений

Задачи на моделирование Вывод формулы

На столе у большого начальника лежит стопка из N заявлений, пронумерованных сверху вниз от 1 до N. Первое заявление он подписывает и убирает из стопки, второе — выбрасывает в мусорную корзину, третье — кладёт вниз стопки. Далее процесс продолжается аналогично, пока заявления в стопке не закончатся. Определите, будет ли заявление с номером K подписано или выброшено, а также номер шага, на котором это произойдёт. Одним шагом является каждая из трёх операций, описанных выше.

Формат входных данных
Первая строка входных данных содержит целое число N, вторая строка — целое число K (1 ≤ N ≤ 109 , 1 ≤ K ≤ N).
Формат выходных данных
В первой строке выведите «Yes», если заявление с номером K будет подписано, и «No», если оно будет выброшено. Во второй строке выведите номер шага, на котором это произойдёт.

Замечание
В первом примере из условия в стопке находятся 4 заявления: (1, 2, 3, 4). Заявление 1 подписывается, заявление 2 выкидывается, заявление 3 перекладывается в конец. После выполнения трёх шагов в стопке будут заявления (4, 3). Поэтому на пятом шаге заявление 3 будет выброшено.
Во втором примере из условия стопка имеет вид (1, 2, 3, 4, 5). После выполнения трёх шагов стопка будет иметь вид (4, 5, 3). За следующие три шага заявление 4 будет подписано, заявление 5 будет выброшено, а заявление 3 — переложено в конец стопки (в которой ничего не будет, кроме заявления 3). Поэтому после шести шагов стопка будет иметь вид (3). На седьмом шаге заявление 3 будет подписано.

2026

Задачи на моделирование реализация

Новая татарская игра <<2026>> ведется на прямоугольной клетчатой доске, состоящей из \(m\) строк и \(n\) столбцов. Доска разбита на \(m \times n\) единичных клеток размером \(1 \times 1\). На некоторых клетках стоят квадратные фишки размером \(1 \times 1\), на каждой фишке написана одна из \(26\) английских букв.

С фишками производятся \(q\) операций. Каждая операция состоит в перемещении всех фишек до упора в одном из четырех направлений. Таким образом, последовательность операций задается строкой \(s\) длины \(q\), состоящей из символов, соответствующих направлениям: <<L>> — влево, <<R>> — вправо, <<U>> — вверх и <<D>> — вниз.

Операция выполняется следующим образом: пока на доске есть хотя бы одна фишка, для которой соседняя с ней в заданном направлении клетка является свободной, эта фишка передвигается на эту соседнюю клетку.

Определите, как будет выглядеть доска после выполнения всех операций.

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

Каждый тест состоит из нескольких наборов входных данных. В первой строке теста задано целое число \(t\) — количество наборов входных данных в тесте (\(1 \le t \le 200\,000\)). Далее следуют описания наборов входных данных. Каждый набор входных данных описывается следующим образом:

В первой строке набора заданы целые числа \(m\) и \(n\) — размеры доски (\(1 \le m, n \le 10^6\), \(1 \le m\times n \le 10^6\)).

В следующих \(m\) строках задано изначальное расположение фишек на доске.

В \(i\)-й строке (\(1 \le i \le m\)) находится строка \(a_{i1}a_{i2}\ldots a_{in}\) длины \(n\), задающая \(i\)-ю строку доски. Каждый символ \(a_{ij}\) является либо строчной буквой английского алфавита от <<a>> до <<z>>, либо точкой <<.>>. Если \(a_{ij}=\mbox{<<.>>}\), то клетка в \(i\)-й строке и \(j\)-м столбце является пустой, иначе в ней находится фишка, на которой написана буква \(a_{ij}\).

В последней строке заданы \(q\) символов \(s_1s_2\ldots s_q\) без пробелов, задающие последовательность операций (\(1 \le q \le 10^6\)). Каждый символ \(s_i\) является одним из символов <<L>>, <<R>>, <<U>> или <<D>>.

Сумма значений \(m \times n\) по всем наборам входных данных не превышает \(2\cdot 10^6\). Сумма значений \(q\) по всем наборам входных данных не превышает \(2\cdot 10^6\).

Формат выходных данных
Для каждого набора входных данных выведите итоговое расположение фишек на доске после выполнения всех операций в том же формате, что и во входных данных.

Обозначим через \(\sum mnq\) сумму \(mnq\) по всем наборам входных данных.

Обозначим через \(\sum mq\) сумму \(mq\) по всем наборам входных данных.

Назовем расположение фишек лестницей, если \(m=n\), \(a_{ij}={<<\texttt{.}>>}\) для всех \(1 \le i \le j \le n\) и \(a_{ij}\ne{<<\texttt{.}>>}\) для всех \(1 \le j < i \le n\). Иными словами, все фишки находятся на клетках ниже главной диагонали доски, и на каждой клетке ниже главной диагонали есть фишка.

Пояснения к примерам
В первом наборе входных данных из примера доска изначально выглядит так:

image

Первая операция сдвигает все фишки влево, так как \(s_1={<<\texttt{L}>>}\). После ее выполнения доска будет выглядеть следующим образом:

image

Вторая операция сдвигает все фишки вправо, так как \(s_2={<<\texttt{R}>>}\). После ее выполнения доска будет выглядеть следующим образом:

image

Третья и последняя операция сдвигает все фишки наверх, так как \(s_3={<<\texttt{U}>>}\). После ее выполнения доска будет выглядеть следующим образом:

image

Фонари

Жадный алгоритм Задачи на моделирование

Вдоль прямой улицы на равном расстоянии располагаются N домов. Будем считать расстояние между домами за единицу длины.
Около каждого дома можно поставить один фонарь. Всего имеется A фонарей, которые могут освещать дома на расстоянии X (включительно), и B фонарей, которые могут освещать дома на расстоянии Y (включительно). В частности, при X = 0 или Y = 0 такой фонарь освещает только тот дом, у которого он установлен.
Вам необходимо расставить минимальное число фонарей так, чтобы все дома были освещены. Один дом может быть освещён несколькими фонарями. Освещать участки улицы между домами необязательно.

Формат входных данных
Первая строка входных данных содержит целое число N (1 ≤ N ≤ 105 ). Следующие четыре строки содержат целые неотрицательные числа A, X, B и Y соответственно, которые не превосходят 105 .
Формат выходных данных
Программа должна вывести столько строк, сколько фонарей необходимо установить. Каждая строка должна содержать два целых числа через пробел — координату фонаря и расстояние, которое он освещает (то есть одно из чисел X или Y ). Координаты представляют из себя целые числа от 1 до N, рядом с каждым домом можно поставить только один фонарь. При наличии нескольких правильных ответов можно вывести любой из них. Если ответа не существует, программа должна вывести одно число −1

Замечание
В ответе к первому примеру фонарь у дома 2 освещает также дома 1 и 3, фонарь у дома 5 — также дома 3, 4, 6 и 7, а фонарь у дома 9 — также дома 8 и 10. В результате все дома освещены. Во втором примере фонарей недостаточно.

Фестиваль чисел

Задачи на моделирование Разбор случаев

В городе Летовецк  "Фестиваль Чисел" отмечается всегда в день с магической датой. Дата называется магической, если день, номер месяца и две последние цифры года совпадают. Например, 01.01.01 - магическая дата. 
По текущей дате, записанной в формате дд.мм.гг определите дату, когда будет отмечатся ближайший "Фестиваль чисел". То есть первую магическую дату, которая была бы не ранее текущей.

Формат входных данных
Программа получает на вход одну строку, которая содержит дату в формате дд.мм.гг (дд, мм, гг - числа, соответствующие реальным значениям дня, месяца и года).
 
Формат выходных данных
Программа должна вывести ближайшую дату "Фестиваля чисел" в формате дд.мм.гг.

Прямоугольный забег

битмаски Задачи на моделирование Разбор случаев

Жители Зожбурга очень любят спорт и в особенности бег. Бегать обычные марафоны им надоело, поэтому они решили организовать прямоугольный забег в стиле Minecraft. Для этого на центральной площади города оборудовали стадион с прямоугольным газоном и дорожками вокруг него. Жители Зожбурга считают, что главное — не победа, а участие, поэтому цель забега — сделать красивую фотографию, а не пробежать быстрее всех.

Центральная площадь Зожбурга представляет собой прямоугольник, разделенный на одинаковые единичные квадраты. Строки пронумерованы сверху вниз с единицы, столбцы слева направо с единицы. Каждый квадрат площади имеет координаты \(r\) и \(c\) — номер строки и столбца, соответственно.

На площади находится прямоугольный газон со сторонами, параллельными сторонам площади. Координаты левого верхнего углового квадрата газона \((R_L, C_L)\), координаты правого нижнего углового квадрата газона \((R_R, C_R)\). Вокруг газона оборудованы \(n\) дорожек для \(n\) бегунов. Дорожка \(i\) находится на расстоянии \(i\) от границы газона, на дорожке \(i\) находится бегун с номером \(i\). Бегун \(i\) стартует с квадрата с координатами \((r_i, c_i)\). Бегуны стартуют одновременно с одинаковой скоростью: через каждую секунду каждый спорстмен меняет текущий квадрат на своей дорожке на следующий квадрат на своей дорожке в направлении против часовой стрелки.

На прямоугольном газоне в квадрате \((R_p, C_p)\) стоит фотограф, цель которого — сделать красивую фотографию. Фотограф тестирует инновационную камеру с двойным объективом. Эта камера делает снимок одновременно в двух противоположных направлениях. Фотограф считает фотографию красивой, если все бегуны в момент, когда он делает снимок, находятся в одновременно в строке \(R_p\) или в стоблце \(C_p\). При этом благодаря инновационному свойству камеры они могут быть либо в одной строке с ним и справа и слева от него, либо в одном столбце с фотографом и выше и ниже него.

Ваша задача — узнать, через какое минимальное количество секунд \(t\) после старта забега фотограф сможет сделать красивую фотографию, или сказать, что красивая фотография в данных условиях не получится.

Формат входных данных
В первой строке входных данных находится число \(n\) (\(1 \le n \le 18\)) — количество бегунов. В следующей строке ввода даны шесть целых чисел \(R_L\), \(C_L\), \(R_R\), \(C_R\) (\(n + 1 \le R_L \le R_R \le 100 - n\), \(n + 1 \le C_L \le C_R \le 100 - n\)), \(R_p\) (\(R_L \le R_p \le R_R\)), \(C_p\) (\(C_L \le C_p \le C_R\)) — координаты левого верхнего квадрата газона, правого нижнего квадрата газона, координаты фотографа, соответственно. Гарантируется, что \(R_R - R_L + C_R - C_L\) делится на \(4\).

В следующих \(n\) строках даны два числа \(r_i\), \(c_i\) — стартовые координаты бегуна \(i\). Гарантируется, что стартовые координаты бегуна \(i\) находятся на дорожке \(i\), на каждой дорожке находится один бегун, дорожка \(i\) находится на расстоянии \(i\) от границы газона.

Формат выходных данных
Выведите единственное число \(t\) — через какое минимальное количество секунд \(t\) после старта забега фотограф сможет сделать красивую фотографию, или \(-1\), если фотографию сделать не получится.

 

Рисунок ко второму примеру.

image
Стартовое положение бегунов.

image
Положение бегунов через 3 секунды. Все бегуны находятся в строке \(R_p\), и фотограф делает красивое фото.

Дано дерево

Деревья Задачи на моделирование реализация

Дано бесконечное бинарное дерево. У дерева есть корень и бесконечное число вершин, у каждой вершины есть левый и правый сын, у всех вершин кроме корня есть отец.

Каждая вершина может быть покрашена в один из \(c\) цветов или быть бесцветной. Изначально все вершины бесцветные.

Вам необходимо обрабатывать два типа запросов:

  1. color(\(u\), \(x\)) Дана вершина \(u\), покрасить вершину \(u\) в цвет \(x\), а затем вызвать color(\(L\), \((x + 1) \bmod c\)) для ее левого сына \(L\) и color(\(R\), \((x - 1 + c) \bmod c\)) для её правого сына \(R\). Заметим, что эта операция перекрашивает все (бесконечное) множество вершин в поддереве вершины \(u\). Здесь \(\bmod\) — операция взятия числа по модулю. Если вершина уже была покрашена, то её цвет меняется на новый.

  2. Дана вершина, вывести её текущий цвет.

Формат входных данных
В первой строке вводятся два числа \(q\), \(c\) — количество запросов и цветов, соответственно (\(1 \leq q \leq 5 \cdot 10^5\), \(1 \leq c \leq 10^9\)). Затем следует \(q\) запросов, каждый из которых начинается с целого числа \(t_i\) — типа \(i\)-го запроса.

Если \(t_i\) = 1, то далее в строке даётся целое число \(x\) (\(0 \leq x \leq c - 1\)) цвет, в который надо покрасить вершину запроса \(u\). В следующей строке описан путь до вершины \(u\) в виде непустой строки \(s_i\), состоящей из символов <<L>> и <<R>>. Данная строка задаёт путь от корня дерева до вершины \(u\), где <<L>> обозначает переход к левому сыну, а <<R>> "— к правому.

Если \(t_i\) = 2, то в следующей строке задаётся путь до вершины, цвет которой необходимо вывести, заданный аналогично предыдущему запросу.

Гарантируется, что сумма длин путей до всех вершин запросов не превосходит \(5 \cdot 10^5\).

Формат выходных данных
Для каждого запроса второго типа в новой строке необходимо вывести ответ на него. Если вершина бесцветная, необходимо вывести число \(-1\).

Памятник

Отрезки реализация Задачи на моделирование

Одна из центральных площадей Архангельска замощена прямоугольными плитками размера \(1 \times k\). Если ввести систему координат, так что левый нижний угол одной из плиток будет иметь координаты \((0, 0)\), то левые нижние углы плиток будут иметь координаты \((i \cdot k+j,j)\) для всех целых \(i\) и \(j\).

На площади было решено установить памятник известному архангельскому писателю и художнику Писахову. Для установки памятника необходимо удалить все плитки, полностью или частично попадающие под его основание. Основание памятника имеет форму многоугольника с целочисленными координатами вершин, все стороны которого параллельны осям координат. Известно, что любая прямая, пересекающая основание памятника и параллельная одной из осей координат, в пересечении с основанием образует один отрезок.

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

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

Входные данные
Первая строка входных данных содержит два числа \(n\) и \(k\) — количество вершин в основании памятника и размер плитки.

Каждая из последующих \(n\) строк содержит два целых числа \(x_i\), \(y_i\) — координаты \(i\)-й вершины основания. Координаты перечислены в порядке обхода против часовой стрелки.

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

Замечание

Автоматические друзья

Пересечение множеств Задачи на моделирование

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

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

Требуется написать программу, которая по данным \(n\) тройкам \((a_i, b_i, c_i)\) значений характеристик каждого из пользователей определяет количество пар потенциальных друзей, то есть таких пар индексов \(i < j\), что из трёх равенств \(a_i = a_j\), \(b_i = b_j\), \(c_i = c_j\) выполняется ровно одно.

Входные данные
Первая строка входных данных содержит число \(n\) — количество пользователей (1 ≤ n ≤ 100 000). Каждая из последующих \(n\) строк содержит три целых положительных числа \(a_i\), \(b_i\) и \(c_i\) — значения характеристик \(i\)-го пользователя (1 ≤ ai , bi , ci ≤ 100)

Выходные данные
Выходные данные должны содержать искомое количество пар потенциальных друзей.

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

Кеннинги

Задачи на моделирование реализация Задача на реализацию

Кеннинг – это форма поэтической метафоры в древности, когда одно слово заменяется словосочетанием (двумя или более словами). Например, “giver of the gold” – это кеннинг для слова “warrior”. Причем нет разницы в использовании слова и его кеннинга: “poor giver of the gold” и “poor warrior” – это одно и то же. Кеннинги могут быть вложенными. Так, “serpent’s lair” означает “gold”, поэтому “giver of the serpent’s lair” означает “warrior”.

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

Входные данные
В первой строке входных данных содержатся 3 числа: ширина результирующего текста w (1≤w≤255), минимальное число непробельных символов в тексте l (1≤l≤3000) и число кеннингов в списке n (1≤n≤380). Далее следует список кеннингов, по одному в строке. Каждая строка сначала содержит заменяемое слово, а за ним следует соответствующее словосочетание. В конце входных данных в одной или нескольких строках содержится план текста.

Каждый кеннинг содержит по крайней мере 2 слова (т.е. одна строка содержит не менее трех слов). Кеннинги могут быть рекурсивными. Например, кеннинг для слова “GNU” может быть таким “GNU is Not UNIX”. Кеннинги чувствительны к грамматическим формам и даже к регистру букв, так слова “warrior”, “Warrior” и “warriors” различны и могут иметь разные кеннинги.

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

Соседние слова разделены в точности одним пробелом или переводом строки. Ни в одной из строк нет ведущих или хвостовых пробелов.

Выходные данные
Если алгоритм не даст результата, то выведите слова “No result” в единственной строке.

В противном случае выведите полученный текст, размещая не более w символов (включая пробелы) в строке. Все переводы строки из первоначального плана должны быть сохранены. Перед очередным словом надо вставить перевод строки, если оно не уместиться в текущей строке. Соседние слова должны быть разделены ровно одним пробелом. В строках не должно быть ведущих и хвостовых пробелов. В корректном тексте не будет больше 10 000 байт.

Поезда

Бинарный поиск по ответу Задачи на моделирование

В связи с увеличившимся количеством аварий на железной дороге, руководство дороги решило изменить график движения поездов. Анализ состояния полотна дороги показал, что оптимальным является следующий график движения: сначала T1 минуту поезд идет со скоростью V1 метр в минуту, потом T2 минуты со скоростью V2 метра в минуту, ..., наконец, TN минут со скоростью VN метрв в минуту. При этом на любом из этих участков поезд может стоять (Vi = 0).

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

Входные данные
Первые две строки входных данных содержат числа L и N (100 ≤ L ≤ 10000, 1 ≤ N ≤ 1000). Далее идет N строк, задающих график движения поезда, каждая строка содержит пару чисел Ti и Vi (1 ≤ Ti ≤ 1000, 0 ≤ Vi ≤ 1000).

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

Сортировка ожерелья

реализация Задачи на моделирование

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

ML (move left) – снять крайнюю левую бусинку и надеть ее на правый конец нитки. По сути, при этом происходит циклический сдвиг ожерелья.
MR (move right) – снять правую бусинку и надеть ее на левый конец.
RL (remove left) – снять крайнюю левую бусинку и положить ее на стол (не одевать на нитку).
RR (remove right) – снять крайнюю правую бусинку и положить ее на стол.
PL (put left) – взять со стола бусинку и надеть ее на левый конец нитки.
PR (put right) – взять со стола бусинку и надеть ее на правый конец нитки.

На столе может лежать не более одной снятой бусинки, то есть после операции RL или RR нельзя использовать другую операцию RL или RR, пока не будет выполнена операция PL или PR.

Ваша задача: используя только перечисленные операции, отсортировать исходное ожерелье.

Входные данные
Программа получает на вход количество бусинок в ожерелье N ≤ 500. Далее идет некоторая перестановка чисел 1, . . . , N, задающая номера бусинок, расположенных на нитке. Номера перечислены слева направо.

Выходные данные
Программа должна вывести последовательность команд ML, MR, RL, RR, PL, PR, которая переводит исходную перестановку бусинок к перестановке 1, . . . , N.

Д-44

Задачи на моделирование реализация

При решении задач баллистики следует учитывать сопротивление воздуха. Пусть сила сопротивления воздуха пропорциональна квадрату модуля скорости движения снаряда и направлена противоположно скорости. Считая коэффициент пропорциональности силы сопротивления воздуха квадрату скорости постоянной величиной, рассчитать дальность полёта снаряда (с точностью до 10 м) при стрельбе из 85-миллиметровой пушки Д-44 под заданным углом к горизонту, если масса снаряда равна 9.6 кг, а начальная скорость - 800 м/с. Известно также, что при стрельбе под углом 45 градусов дальность стрельбы составляет 15 650 м. Ускорение свободного падения считать равным 9.8 м/с2.

Ограничения: угол от 5 до 85 градусов.

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

Выходные данные
Вывести одно целое число - дальность в метрах.

Марковский цикл

Задачи на моделирование реализация

Ограниченный алгоритм Маркова состоит из последовательности предложений

s1s2...sN -> d1d2...dN,
где si и di - символы из алфавита A, B, C. Подстрока s1s2...sN называется левой частью, а d1d2...dN - правой частью предложения.

Алгоритм выполняется над исходной текстовой строкой, состоящей из прописных латинских букв A, B, C, следующим образом: перебираются все предложения, начиная с первого. Если левая часть предложения входит в текстовую строку, то самое левое вхождение заменяется правой частью этого предложения, и поиск вновь начинается с первого предложения. Если ни одно предложение не может быть применено, алгоритм останавливается.

При выполнении алгоритма возможны два результата: либо остановка, либо бесконечный цикл с определенным периодом. По данной строке и набору предложений алгоритма Маркова определить количество "ациклических" (выполненных до начала цикла) шагов и длину самого цикла. Если алгоритм останавливается, то длина цикла считается нулевой, а все выполненные шаги - ациклическими.

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

Ограничения: длина исходной текстовой строки и левых частей предложений - от 1 до 12 букв, количество предложений - от 1 до 50.

Выходные данные
Вывести два целых числа, разделённых пробелом - количество ациклических шагов и длину цикла.

Двойная решетка

Задачи на моделирование Вывод формулы

Две бесконечные равномерные прямоугольные решётки заданы размерами ячеек x1 y1 и x2 y2. Решётки расположены на плоскости параллельно друг другу и координатным осям так, что смещение одного из узлов второй решётки относительно узла первой составляет Dx по горизонтали и Dy по вертикали. В результате наложения образуется новая, "составная" решётка с более мелкими ячейками различного размера. Требуется вывести в порядке возрастания все различные площади ячеек составной решётки.

Ограничения: 1 <= x1, y1, x2, y2 <= 100, 0 <= Dx < x1, 0 <= Dy < y1, все числа целые.

Входные данные
В первой строке находятся числа x1, y1, x2, y2, Dx, Dy, разделённые пробелами.

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

Диалог компьютеров

Разбор случаев Задачи на моделирование

Три компьютера соединены сетью. Один из них - сервер, два других - клиенты. На сервере есть несколько файлов. Полные имена файлов, состоящие из двух частей (имя и расширение), различны. Оба клиента знают полные имена всех файлов, находящихся на сервере. Сервер выбирает один из своих файлов и посылает его имя одному из клиентов, а расширение - второму.

Затем клиенты начинают общаться друг с другом, пытаясь определить, какой файл был выбран сервером (они хотят узнать полное имя файла). Однако клиенты вынуждены общаться очень ограниченным способом. Они по очереди посылают сообщения друг другу, но могут сказать только, что не знают полного имени файла. Если клиент не знает полного имени выбранного файла, он может послать другому клиенту сообщение, говорящее: "Я не знаю полного имени файла". Клиенты чередуются, посылая только это сообщение туда и обратно. Так продолжается до тех пор, пока один из клиентов не узнает полное имя файла, или они не решат закончить диалог. Клиент, получивший первую часть полного имени файла, всегда ждёт, что второй клиент пошлёт первое сообщение.

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

Входные данные
В первой строке находятся два целых числа, N и M, разделённые пробелом: N - число файлов на сервере, M - число сообщений, посланных клиентами, пытающимися определить полное имя файла.

Каждая из следующих N строк содержит одно полное имя файла. Полное имя файла дано в стиле, аналогичном формату 8.3 MS-DOS. Каждое полное имя представлено в форме имя.расширение, где и имя, и расширение состоит только из заглавных латинских букв и цифр. Имя всегда имеет от одного до восьми символов. Расширение имеет до трёх символов и может быть пусто. Если расширение пусто, разделяющая точка может быть опущена.

Каждое полное имя файла появляется во входном файле не более одного раза.

1 <= N <= 1000, 1 <= M <= 100.

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

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

Игра "черный ящик"

Задачи на моделирование реализация

В игру «черный ящик» играют с помощью квадратного черного ящика, который располагается на плоском столе. На каждой из сторон ящика есть n отверстий (всего 4n отверстий), в которые можно вбрасывать шар. Вброшенный шар через некоторое время вылетит наружу через одно из 4n отверстий, возможно, через то же отверстие, в которое он был вброшен.



Содержимое черного ящика можно рассматривать в виде сетки размером n x n. Отверстия в сторонах ящика – это начала и концы строк и столбцов сетки. Каждая клетка сетки либо пустая, либо занята отражателем. Отражатель – это устройство, которое изменяет направление движения шара на 90 градусов. Рассмотрим пример ящика размером 5x 5.

Вброшенный шар движется по прямой, пока не попадает в отражатель или не вылетит наружу. Когда шар попадает в отражатель, шар меняет направление своего движения, а отражатель меняет свое положение (под словом «меняет» подразумевается поворот на 90 градусов). На примере показаны действия отражателя.



a) Первый шар вброшен через отверстие. Он попал в отражатель и изменил направление движения.

b) После попадания первого шара отражатель изменил свое положение. Новый шар вбросили в то же отверстие, он попал в тот же отражатель, и отразился в направлении, противоположном направлению первого шара после отражения.

c) Отражатель изменил свое положение. После каждого попадания положение отражателя изменяется.


Когда шар попадает в отражатель, раздается звуковой сигнал. Количество отражений шара можно узнать, посчитав количество сигналов. Можно доказать, что шар всегда вылетает из ящика. У ящика есть одна кнопка, которая приводит его в исходное положение, и другая кнопка, которая меняет положение всех отражателей на противоположное.

ЗАДАНИЕ
Вам будет предоставлен интерфейс к 15 черным ящикам с помощью библиотеки функций Pascal или C/C++. Вы должны определить содержимое каждого из ящиков как можно точнее и отправить на проверку файлы, описывающие каждый ящик. Интерфейс также предоставляет возможность создания собственных ящиков для тестирования.

ОГРАНИЧЕНИЯ
1 ≤ ≤ 30

 

ВЫВОД

Вы должны предоставить на проверку файлы, содержащие следующие данные для каждого из 15 черных ящиков:
blackboxK.out ОПИСАНИЕ
#FILE blackbox K
.....
.../.
....
.../.
.?.?.
СТРОКА 1: Заголовок файла, который должен иметь вид
#FILE blackbox K
где K (число в диапазоне 1..15) соответствует ящику, для которого найдено решение.
n СТРОК: Каждая строка описывает строку ящика, начиная с верхней и заканчивая нижней. Каждая строка должна содержать ровно n символов, соответствующих клеткам, находящимся на пересечении этой строки и столбцов (слева направо).
·Символ ‘.’ обозначает, что клетка пуста.
·Символ ‘/’ обозначает, что в клетке находится отражатель с исходным положением ‘/’
·Символ ‘’ обозначает, что в клетке находится отражатель с исходным положением ‘’
·Символ ‘?’ обозначает, что Вы не смогли определить исходное содержимое клетки

 

БИБЛИОТЕКА

Вам будет предоставлена библиотека, которая содержит следующие функции:
ФУНКЦИЯ Описание
PASCAL
function Initialize(box: integer): integer;
C/C++
int Initialize(int box);
Инициализирует библиотеку. Эта функция должна вызываться один раз в начале программы. Она возвращает значение n – количество отверстий на каждой стороне ящика.
Параметр box должен содержать целое число в пределах от 1 до 15, указывающее номер ящика, который Вы хотите использовать, или 0, если Вы хотите использовать ящик, созданный Вами.
PASCAL
function throwBall(holeIn, sideIn: integer;
var holeOut, sideOut: integer): longint;
C
int throwBall(int holeIn, int sideIn,
int *holeOut, int *sideOut);
C++
int throwBall(int holeIn, int sideIn,
int &holeOut, int &sideOut);
Вбрасывает шар в ящик через отверстие с номером holeIn на стороне sideIn. Стороны пронумерованы следующим образом: 1 – Верхняя, 2 – Правая, 3 – Нижняя и 4 – Левая. Отверстия пронумерованы слева направо и сверху вниз, начиная с номера 1 на каждой стороне. В параметрах holeOut и sideOut функция возвращает номер отверстия и номер стороны – место, где шар вылетел наружу. В качестве своего значения функция throwBall возвращает количество звуковых сигналов, вызванных попаданиями шара в отражатели.
PASCAL
procedure ResetBox;
C/C++
Void ResetBox();
Возвращает все отражатели в исходное положение.
PASCAL
procedure ToggleDeflectors;
C/C++
Void ToggleDeflectors();
Меняет положения всех отражателей в ящике на противоположные.
PASCAL
procedure Finalize;
C/C++
Void Finalize();
Корректно заканчивает взаимодействие с ящиком. Эта функция должна вызываться в конце Вашей программы.
Чтобы использовать библиотеку в Вашей программе, необходимо выполнить следующее:
·FreePascalВ каталоге задачи есть файлы pbblib .o и pbblib. ppu. Чтобы их использовать, необходимо добавить следующую строку в Вашу программу
uses pbblib;
В файле pblackbox.pas представлен пример использования библиотеки.

·C: В каталоге задачи есть файлы cbblib.o и cbblib.h. Чтобы их использовать, необходимо добавить следующую директиву в Вашу программу
#include “cbblib.h”
В файле cblackbox.c представлен пример использования библиотеки. Чтобы скомпилировать код, используйте следующую команду
gcc –o yourprogram cbblib.o yourprogram.c

·C++: В каталоге задачи есть файлы cppbblib.o и cppbblib.h. Чтобы их использовать, необходимо добавить следующую директиву в Вашу программу
#include “cppbblib.h”
В файле cppblackbox .cpp представлен пример использования библиотеки. Чтобы скомпилировать код, используйте следующую команду
g++ –o yourprogram cppbblib.o yourprogram.cpp

 

ЗАМЕЧАНИЕ: В любой момент времени может быть запущено не более одной программы, работающей с библиотекой.
 

ПРИМЕР ВЗАИМОДЕЙСТВИЯ

Ниже представлен пример взаимодействия с ящиком, изображенным ранее на рисунке:
ВЫЗОВ ФУНКЦИИ ВОЗВРАЩЕННОЕ ЗНАЧЕНИЕ
Initialize(0); Пусть программа взаимодействует с ящиком, изображенным на рисунке. Тогда функция возвращает значение 5, означая, что n = 5.
PASCAL
throwBall(3,4,holeOut,sideOut );
C
throwBall(3,4,&holeOut,&sideOut);
C++
throwBall(3,4,holeOut,sideOut);
Шар вбрасывается в отверстие с номером 3 (третье сверху) на левой стороне. Возвращается значение 1 – это означает, что шар отразился один раз. После возврата из функции, переменная holeOut содержит значение 2, а переменная sideOut содержит значение 3, то есть шар вылетел через отверстие с номером 2 (второе слева) нижней стороны ящика.

ЭКСПЕРИМЕНТИРОВАНИЕ
Если Вы передадите значение 0 в функцию Initialize, библиотека прочитает содержимое ящика из файла blackbox.in. Так Вы сможете экспериментировать с библиотекой. Формат файла blackbox.in описан ниже.
blackbox.in ОПИСАНИЕ
5
3
2 3
4 2 /
4 4 /
СТРОКА 1: Содержит целое число nкоторое задает количество отверстий на каждой стороне.
СТРОКА 2: Содержит целое число d , которое задает количество отражателей в ящике.
СЛЕДУЮЩИЕ d СТРОК: Каждый отражатель описывается одной строкой. Каждая строка содержит два целых числа, разделенных пробелом, которые задают номер столбца и строки, где расположен отражатель. После второго числа через один пробел записан символ, который может быть ‘/’ или ‘’ и определяет исходное положение отражателя.
ЗАМЕЧАНИЕ: Файл blackbox. in из примера описывает ящик, изображенный вверху страницы 1.
 

СООБЩЕНИЯ ОБ ОШИБКАХ

В случае любых проблем библиотека выведет сообщение об ошибке в стандартный поток вывода ошибок. Возможные сообщения об ошибке и их значения приведены в нижеследующей таблице.
 
СООБЩЕНИЕ ЗНАЧЕНИЕ
ERR 1 More than one app Только одна программа может одновременно работать с черными ящиками, перезапустите все программы и запускайте их строго по одной.
ERR 2 Invalid box Переданный вами номер ящика не лежит в пределах от 0 до 15.
ERR 3 Invalid deflector В файле blackbox.in находится отражатель в некорректной клетке.
ERR 4 Invalid symbol В файле blackbox.in обнаружен недопустимый символ.
ERR 5 Invalid size Размер ящика в файле blackbox. in задан неверно.
ERR 6 Invalid input hole Либо сторона, либо отверстие вбрасывания шара заданы неверно.
ERR 7 ALARM Пожалуйста, обратитесь к техническому персоналу.

 

Сравнение URL

Задача на реализацию Задачи на моделирование

Для идентификации ресурсов в сети Internet используются URL (Uniform Resource Locator). URL состоит из нескольких элементов: протокол, хост, порт, путь, файл и секция. Некоторые элементы URL могут быть опущены. Рассмотрим упрощенный формат URL:

[протокол://]хост[:порт][путь/[файл[#секция]]]
Заключенные в квадратные скобки элементы могут быть опущены, т.е. например, можно не указать протокол или секцию. Но, например, если указан файл, то обязательно должен быть указан путь. Регистр букв в элементах URL не важен.

Рассмотрим кратко все элементы URL:

*Протокол - это способ доступа к файлу, URL с разными протоколами и одинаковыми остальными элементами могут указывать на различные ресурсы.
*Хост и порт - это имя некоторого сервера в сети и способ доступа к нему (порт - натуральное число, не превосходящее 65535).
*Путь представляет собой путь к файлу, содержащему запрашиваемый ресурс, от некоторого каталога на сервере, который называется корневым. При этом для разделения имен каталогов используется символ "/". Путь, если он не пуст, всегда начинается с символа "/". Специальное обозначение '.' соответствует самому каталогу, '..' - родительскому каталогу.
*Файл - это файл, содержащий запрашиваемый ресурс.
Наконец, файл может быть разбит на секции каким либо способом и можно указать, к какой именно секции вы хотите обратиться.

Различные символы в URL могут быть заменены своими шестнадцатеричными ASCII кодами с помощью символа %, например a = %41, Z = %5A. В коде всегда используется ровно две шестнадцатеричные цифры.

Некоторые символы могут встречаться в элементах URL только как шестнадцатеричные коды - все символы, кроме букв латинского алфавита, цифр и символов "." и "-", а некоторые не могут встречаться вообще: "\", "#", "*", "@", "%", "?", ":", ",", а также символы с ASCII-кодом меньше %20. Символ "/" может встречаться в элементах URL только в пути для разделения входящих в него каталогов. Имя файла не может состоять только из точек.

Рассмотрим примеры URL:

http://neerc.ifmo.ru/school
ftp://somewhere.net:1234/pub/files/coolgame.zip
nobody.nowhere.net/some%20dir/some%20file#some%20info


Ваша цель в этой задаче - помочь разработчикам web-сервера. Для web-сервера отсутствующие части URL имеют следующие значения по умолчанию:

Протокол http
Порт 80
Путь пустая строка
Файл index.html
Секция пустая строка


Различные как строки URL могут указывать на один и тот же ресурс, например следующие три URL:

neerc.ifmo.ru
http://neerc.ifmo.ru:80/index.html#
Http://NEERC.IFMO.Ru/Dir/../././

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

Входные данные
Входные данные состоят из двух строк, каждая из них содержит URL. Оба URL удовлетворяют формату, приведенному в условии этой задачи. Длина каждого URL не превосходит 200 символов. Гарантируется, что ни один из промежуточных каталогов на пути к ресурсу не лежит выше корневого каталога (т.е. не может встретиться, например, URL http://somewhere.com/../dir/index.html) а также, что имена всех каталогов состоят по крайней мере из одного символа (два символа "/" не могут идти подряд в любом месте, кроме как непосредственно после двоеточия после имени протокола).

Выходные данные
Выведите YES, если оба URL, приведенные во входных данных, указывают на один и тот же ресурс, и NO в противном случае.

Джентльменский покер

Задача на реализацию Задачи на моделирование

Наверняка все слышали про карточную игру "Покер". В джентльменском покере все, как и в обычном - игроки сидят за круглым столом, ставят ставки, повышают их, и кто-то в конце каждого раунда забирает выигрыш - банк. Только в джентльменском покере выигрыш раунда достается не одному игроку, а делится на K человек (K - степень щедрости). А точнее, банк делится поровну между победителем раунда и следующими K-1 игроками, сидящими за выигравшим (за последним сидит первый игрок). В случае, если сумма выигранного банка не делится поровну между K игроками, то излишек забирает победитель. Так, например, если играют 4 человека и степень щедрости равна 3, то при выигрыше первого игрока банк поделится между 1-ым, 2-ым и 3-им игроками, а при победе четвертого - между 4-ым, 1-ым и 2-ым. Ваша задача по протоколу игры сосчитать, сколько денег у каждого из игроков оказалось в конце игры. Т.к. покер джентльменский, то разрешается играть в долг.


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

В первой строке содержатся три положительных целых числа: N, K и S, где N - число игроков (игроки пронумерованы от 1 до N по направлению хода игры), K - степень щедрости и S - начальная сумма денег у каждого игрока, 2 <= N <= 30000, 1 <= K <= N, S <= 10500. Гарантируется, что долг игрока будет не менее, чем -215-1 и выигрыш не более, чем 215. Далее идут строки, описывающие протокол игры. Протокол игры состоит не более, чем из 210 событий. Возможные строки протокола игры:
BET A B - игрок под номером А добавляет в банк сумму B. В начале каждого раунда банк пуст.
WIN A - означает конец раунда и игрок под номером А забирает банк и делит его со следующими K-1 игроками.
END - означает конец игры. Данная строка является последней во входном файле.


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

Вывести конечные суммы, которые оказались у игроков к концу игры. Первое число - сумма денег первого игрока, затем через пробел - сумма второго, и т.д. до последнего. Всего N чисел.

Речной бой

Вывод формулы Задачи на моделирование

Поле в игре <<Речной бой>> представляет собой полоску длины \(n\) клеток и шириной в одну клетку. Где-то на поле расположен корабль из \(k\) клеток (\(k \le n\)). Какое наименьшее число выстрелов необходимо, чтобы гарантированно потопить корабль? После каждого выстрела сообщается его результат: <<мимо>>, <<ранен>> или <<убит>>.

Формат входных данных
Первая строка входных данных содержит целое число \(n\) (\(1 \le n \le 10^9\)).

Вторая строка входных данных содержит целое число \(k\) (\(1 \le k \le n\)).

Формат выходных данных
Выведите одно целое число — количество выстрелов.

Замечание

В первом примере поле состоит из \(n=4\) клеток, корабль имеет длину \(k=2\). Первый выстрел нужно сделать в одну из двух центральных клеток. Если результатом будет <<ранен>>, то вторая клетка корабля находится в одной из двух соседних клеток, и за два выстрела мы гарантированно потопим корабль Если результатом первого выстрела будет <<мимо>>, то корабль занимает две единственные свободные смежные клетки, которые тоже можно подбить двумя выстрелами. Итого нужно 3 выстрела. Двух выстрелов недостаточно, так как всегда есть шанс промахнуться первым выстрелом.

Новый год в детском саду

Вывод формулы Задачи на моделирование

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

Дети с интересом восприняли идею и вырезали из бумаги \(a\) звездочек и \(b\) снежинок. Теперь они планируют отправить их Санте Клаусу по почте. Им так понравились вырезанные ими украшения, что они, возможно, решат оставить себе часть. Таким образом, дети могут отправить Санте \(x\) звездочек и \(y\) снежинок, где \(0 \le x \le a\) и \(0 \le y \le b\). Чтобы Санта не расстроился, дети должны отправить ему хотя бы одно украшение. То есть должно выполняться также условие \(x + y > 0\).

Чтобы все олени выглядели красиво, на каждом должно оказаться одинаковое количество украшений. Известно, что у Санты \(n\) оленей, поэтому если будут отправлены \(x\) звездочек и \(y\) снежинок, величина \(x+y\) должна делиться на \(n\).

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

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

В одном наборе входных данных содержатся несколько тестов. Каждый тест следует решить независимо.
Первая строка входных данных содержит целое число \(t\) — количество тестов (\(1 \le t \le 10^5\)).

Следующие строки описывают тесты, по одному на строке. Описание теста состоит из трех целых чисел \(n\), \(a\) и \(b\) — количество оленей у Санты, количество звездочек и количество снежинок, вырезанных детьми (\(4 \le n \le 10^9\); \(0 \le a, b \le 10^9\)).

Формат выходных данных
Выведите \(t\) чисел. Для каждого теста выведите одно число: количество способов составить посылку для Санты Клауса.

Замечание
В первом тесте у Санты \(4\) оленя, а дети вырезали \(2\) звездочки и \(2\) снежинки. Здесь подходит только один набор — нужно отправить все вырезанные украшения.

Во втором тесте у Санты также \(4\) оленя, но дети вырезали \(4\) звездочки и \(4\) снежинки. Здесь подходит 6 наборов: 0 звездочек и 4 снежинки, 1 звездочка и 3 снежинки, 2 звездочки и 2 снежинки, 3 звездочки и 1 снежинка, 4 звездочки и 0 снежинок, а также 4 звездочки и 4 снежинки.

Долгое вычитание

Задачи на моделирование Линейные алгоритмы

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

Сергей Аксаков, <<Детские годы Багрова-внука>>.

На доске написано число \(n\), с которым несколько раз производят следующую операцию: если в записи числа на доске есть хотя бы одна нечётная цифра, то очередной мальчик вычитает из него 1, в противном случае — делит на 2. Сколько мальчиков нужно вызвать, чтобы на доске получился ноль?

Формат входных данных
Единственная строка входного файла содержит натуральное число \(n\) (\(1 \le n \le 10^{18}\)).

Обратите внимание, что входные данные в этой задаче могут превышать возможное значение 32-битной целочисленной переменной, поэтому необходимо использовать 64-битные целочисленные типы данных (тип int64 в языке Pascal, тип long long в C и C++, тип long в Java и C#).

Формат выходных данных
Выведите одно натуральное число — ответ на вопрос задачи.

 

Замечание

В примере дано \(n = 25\). Число имеет в своей записи нечётную цифру \(5\), поэтому после первой операции \(n\) уменьшится на \(1\) и станет равно \(24\).

Число \(24\) не имеет в своей записи нечётных цифр, поэтому после второй операции \(n\) уменьшится в \(2\) раза и станет равно \(12\).

Далее \(n\) будет принимать значения: \(11\), \(10\), \(9\), \(8\), \(4\), \(2\), \(1\) и \(0\). Всего потребуется \(10\) операций.

Чемпионат по устному счету

Задача на реализацию Задачи на моделирование

Председатель жюри чемпионата по устному счету Иван Владимирович Треугольников придумал новое задание для участников чемпионата. Исходно на доске выписывается \(n\) целых чисел: \(a_1, a_2, \ldots, a_n\). После этого участник должен выполнять команды двух типов:

  1. Стереть \(i\)-е число с доски и записать вместо него число \(x\). То есть, если на доске были записаны числа \(a_1, a_2, \ldots, a_n\), то после выполнения команды числа будут равны: \(a_1, \ldots, a_{i - 1}, x, a_{i + 1}, \ldots, a_n\).

  2. Циклически сдвинуть последовательность чисел на \(k\) вправо. То есть, если на доске были записаны числа \(a_1, a_2, \ldots, a_n\), то после выполнения команды числа будут равны: \(a_{n - k + 1}, a_{n - k + 2}, \ldots, a_n, a_1, a_2, \ldots, a_{n - k}\).

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

Формат входных данных
В первой строке записано целое число \(n\) — количество чисел, изначально записанных на доске (\(2 \leq n \leq 10^5\)).

Во второй строке через пробел записаны \(n\) целых чисел: \(a_1, a_2, \ldots, a_n\) — числа, изначально выписанные на доске (\(-10^9 \leq a_i \leq 10^9\)).

В третьей строке записано целое число \(q\) — количество команд, которые необходимо выполнить (\(1 \leq q \leq 10^5\)).

В каждой из следующих \(q\) строк записана очередная команда в следующем формате:

  • \(1~i~x\) — это означает, что участник должен заменить \(i\)-е число последовательности на число \(x\) (\(1 \leq i \leq n\); \(-10^9 \leq x \leq 10^9\)).

  • \(2~k\) — это означает, что участник должен циклически сдвинуть последовательность чисел на \(k\) вправо (\(1 \leq k < n\)).

Формат выходных данных
В качестве ответа выведите \(q\) строк, в каждой из которых записано одно целое число.

В \(i\)-й строке должна быть записана сумма чисел на доске после выполнения первых \(i\) команд.

Обратите внимание, что ответ может быть достаточно большим и для его хранения потребуется 64-битный тип данных, int64 в паскале, long long в C++, long в Java.

Замечание
Рассмотрим пример из условия. Изначально последовательность записанных на доске чисел равна: \(4,~1,~2,~1,~5,~3\).

После первой команды последовательность циклически сдвигается на \(3\) элемента вправо. Новая последовательность: \(1,~5,~3,~4,~1,~2\). Сумма чисел равна: \(1 + 5 + 3 + 4 + 1 + 2 = 16\).

После второй команды необходимо заменить третий элемент последовательности на число \(10\). Новая последовательность: \(1,~5,~10,~4,~1,~2\). Сумма чисел равна: \(1 + 5 + 10 + 4 + 1 + 2 = 23\).

После третьей команды заменить четвертый элемент на число \(4\). Так как четвертый элемент уже равен \(4\), последовательность не изменяется. Сумма чисел также равна \(23\).

После четвертой команды последовательность циклически сдвигается на \(1\): \(2,~1,~5,~10,~4,~1\). Сумма чисел не изменилась.

Наконец, после пятой команды последовательность становится равна: \(-10,~1,~5,~10,~4,~1\). Сумма чисел в итоговой последовательности равна \(-10 + 1 + 5 + 10 + 4 + 1 = 11\).

Робот-курьер

Обход в глубину Интерактивные задачи Задачи на моделирование реализация

Это интерактивная задача. Ваше решение должно взаимодействовать с программой-интерактором по описанному ниже протоколу.

На вас возложили ответственную задачу по управлением роботом-курьером. Карта, по которой перемещается робот, представляет из себя поле размера \(n \times m\) (\(n\) строк и \(m\) столбцов). Каждая клетка поля может быть либо тротуаром (‘.’), либо проезжей частью дороги (‘+’).

Ровно \(k\) клеток проезжей части содержат регулируемые пешеходные переходы. Гарантируется, что для любого пешеходного перехода ровно две противоположные относительно него соседние с ним по стороне клетки (то есть верхняя и нижняя или левая и правая) являются клетками тротуара. Соответственно, с обоих концов каждого пешеходного перехода расположен светофор.

Робот может перемещаться только по тротуарам и пешеходным переходам. Для определения цвета светофора робот обладает камерой с разрешением \(h \times w\) (где \(w\) четно). Для управления роботом вы можете передавать ему следующие команды:

  • <<turn \(c\)>>, где \(c \in \{\text{`{L}'}, \text{`{U}'}, \text{`{R}'}, \text{`{D}'}\}\), означает поворот в соответствующую сторону (влево, вверх, вправо или вниз);

  • <<move>> означает перемещение на одну клетку вперед относительно текущего направления;

  • <<camera>> означает получение изображения с камеры; в ответ на эту команду вы получаете таблицу из \(h \times w\) символов, каждый из которых описывает преобладающий цвет (‘r’, ‘g’ или ‘b’ — красный, зеленый или синий) в соответствующей области пространства перед роботом;

  • <<wait \(t\)>> означает ожидание в течение \(t\) секунд.

На поворот или перемещение требуется ровно одна секунда. Получение изображения с камеры времени не требует. Каждый светофор горит одним цветом в течение фиксированного периода времени, после чего моментально переключается и горит другим цветом то же время (и так далее). Этот период времени вам неизвестен и может быть разным у разных светофоров, однако гарантируется, что он не превышает \(10^6\).

Светофоры могут находиться на разной высоте и на разном расстоянии сбоку от соответствующего перехода. Если робот находится около перехода с \(i\)-м светофором и смотрит в его направлении, на изображении с камеры светофор будет занимать две клетки в \(a_i\)-й и \((a_i + 1)\)-й снизу строках в столбце на расстоянии \(b_i\) от центра (слева от центра, если \(b_i < 0\), и справа, если \(b_i > 0\)). Для светофора, горящего красным, нижняя из этих двух клеток равна ‘b’, а верхняя равна ‘r’. Для зеленого светофора нижняя клетка равна ‘g’, а верхняя — ‘b’. Остальные клетки на изображении могут любого из трех цветов.

Требуется переместить робота из клетки \((i_1, j_1)\) (\(i_1\)-я сверху строка, \(j_1\)-й слева столбец) в клетку \((i_2, j_2)\). Начинать пересекать пешеходные переходы можно только если на соответствующем светофоре горит зеленый сигнал. Если движение по переходу начато, когда на светофоре горит зеленый сигнал, можно считать, что как минимум в течение еще двух секунд находиться на переходе безопасно, то есть можно гарантированно переместиться на тротуар на противоположной стороне дороги.

Напишите программу, сообщающую роботу команды, безопасно приводящие его из стартовой клетки в конечную. Минимизировать затраченное в пути время не требуется. В изначальной клетке робот находится в направлении <<вверх>> (‘U’).

Каждый тест состоит из нескольких наборов входных данных. В первой строке ввода дано единственное целое число \(t\) — количество наборов входных данных в тесте (\(1 \le t \le 50\)).

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

В первой строке описания карты даны два целых числа \(n\) и \(m\) — размеры карты (\(1 \le n, m \le 50\)). Следующие \(n\) строк содержат по \(m\) символов каждая и описывают карту. Символ на \(j\)-й позиции \(i\)-й строки описывает клетку с координатами \((i, j)\) и равен ‘.’, если это клетка тротуара, и ‘+’, если это клетка проезжей части.

В следующей строке даны три целых числа \(k\), \(h\) и \(w\) — количество переходов со светофорами и разрешение камеры, соответственно (\(k \le n \cdot m\); \(2 \le h, w \le 8\); \(w\) четно).

Следующие \(3k\) строк описывают светофоры: по три на каждый из \(k\) переходов. В первой строке для \(i\)-го светофора дано положение соответствующего ему перехода \((r_i, c_i)\) (\(1 \le r_i \le n\); \(1 \le c_i \le m\)). Во второй строке дано описание светофора с одного из двух концов перехода в формате <<\(d_{i,1}\) \(a_{i,1}\) \(b_{i,2}\)>>, где \(d_1\) указывает на направление перехода, соответствующее этому светофору, а \(a_{i,1}\) и \(b_{i,1}\) — его высота и расстояние от центра перехода, соответственно (\(d_{i,1} \in \{\text{`{L}'}, \text{`{U}'}, \text{`{R}'}, \text{`{D}'}\}\); \(1 \le a_{i,1} < h\); \(1 \le |b_{i,1}| \le \frac{w}{2}\)). В третьей строке в том же формате описывается светофор с противоположной стороны перехода.

Наконец, в последней строке набора входных данных даны четыре целых числа \(i_1\), \(j_1\), \(i_2\) и \(j_2\) — координаты стартовой и конечной клеток, соответственно (\(1 \le i_1, i_2 \le n\); \(1 \le j_1, j_2 \le m\)).

Гарантируется, что все \((r_i, c_i)\) различны, а описания светофоров корректны: направления \(d_{i,1}\) и \(d_{i,2}\), указанные во вводе, противоположны и соответствуют направлениям, в которых от этого перехода расположен тротуар. Также гарантируется, что конечная клетка достижима из стартовой.

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

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

  • Чтобы повернуть робота, выведите <<turn \(c\)>>, где \(c \in \{\text{`{L}'}, \text{`{U}'}, \text{`{R}'}, \text{`{D}'}\}\). В результате выполнения этого действия робот повернется <<лицом>> в соответствующем направлении, и интерактор выведет <<OK>> на отдельной строке.

  • Чтобы переместить робота, выведите <<move>>. В таком случае робот переместится на одну клетку вперед в том направлении, в котором он повернут. Если это действие успешно, интерактор выведет <<OK>> на отдельной строке. Если при этом робот достиг конечной клетки \((i_2, j_2)\), интерактор перейдет к рассмотрению следующего набора входных данных и подаст соответствующие входные данные на ввод вашей программе (либо завершится и засчитает ваше решение, если это был последний набор входных данных).

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

  • Чтобы сделать снимок, выведите <<camera>>. В ответ интерактор выведет \(h\) строк по \(w\) символов каждая. Каждый символ равен ‘r’, ‘g’ или ‘b’ и задает цвет соответствующего <<пикселя>>. Если непосредственно перед роботом не находится пешеходный переход, все символы будут случайными. Если же робот стоит у перехода, то два символа, соответствующие положению на <<изображении>> светофора напротив, будут отражать цвет этого светофора как описано в условии.

  • Чтобы подождать \(t\) секунд (\(1 \le t \le 2 \cdot 10^6\)), выведите <<wait \(t\)>>. В ответ интерактор выведет <<OK>> на отдельной строке и обновит состояние всех светофоров, цвет которых за это время поменяется.

    Запрещается делать более \(25\) команд ожидания в одной и той же клетке поля. Если ваше решение совершает хотя бы \(26\) запросов ожидания из одной и той же клетки, интерактор в ответ выведет <<FAIL>> и завершится с вердиктом Wrong Answer.

 

Вывод каждой команды ваша программа должна завершать выводом символа перевода строки (endl, ‘\n’) и сбросом буфера вывода. Сбросить буфер можно с помощью

  • <<fflush(stdout)>> в C и C++, или <<cout.flush()>> только в C++,

  • <<System.out.flush()>> в Java,

  • <<sys.stdout.flush()>> в Python,

  • и <<Console.Out.Flush()>> в C#.

  • В Pascal и Delphi сброс буфера при выводе в стандартный поток вывода происходит автоматически.

Решение, не выполняющее эти действия, может получить произвольный вердикт (скорее всего, Time Limit Exceeded или Idleness Limit Exceeded).

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

Пояснение к примеру

Во втором наборе входных данных в примере:

  1. В клетке \((3, 2)\) нет перехода, поэтому по ней нельзя перемещаться;

  2. При пересечении перехода в \((1, 2)\) в направлении ‘R’ светофор находится на высоте \(2\) и на расстоянии \(-2\) от центра: соответственно, его клетки на изображении располагаются в первом столбце во второй и третьей снизу строках. Для данного снимка они равны ‘b’ в верхней строке и ‘g’ во второй, поэтому его сразу можно пересекать.

  3. При пересечении перехода в \((2, 3)\) в направлении ‘D’ светофор находится на высоте \(1\) и на расстоянии \(2\) от центра, то есть в четвертом столбце в двух нижних строках. На первом изображении он горит красным, а после ожидания (<<wait 10>>) — зеленым.

Баскетбол

Задачи на моделирование Задача на реализацию

На физкультуре школьники 10-А класса играют в баскетбол. В классе учится \(n\) школьников, которые построились в ряд. Учитель физкультуры разделил их на две команды следующим образом: в первую команду пошли школьники, которые стоят на нечетных местах: первом, третьем, пятом, и т. д. Школьники, которые стоят на четных местах: втором, четвертом, шестом, и т. д. составили вторую команду.

От каждой команды на поле постоянно находятся \(p\) школьников. Исходно от каждой команды на поле вышли \(p\) школьников, которые стояли раньше в исходном построении. Чтобы все школьники поиграли, каждую минуту учитель делает замены в обеих командах.

Игрок, которые провел на поле больше всего минут к этому моменту (не обязательно подряд) отправляется на скамейку запасных. Если таких игроков несколько, отдыхать идет игрок с максимальным номером в исходном построении.

Запасной же игрок, которые провел к этому моменту на поле меньше всего минут, выходит на поле. Если таких игроков несколько, на поле выходит игрок с минимальным номером в исходном построении.

Учителя заинтересовал вопрос, кто же будет на поле после \(m\)-й смены игроков. Помогите ему выяснить это.

Например, пусть исходно шесть учеников построились в следующем порядке: Иванов, Петров, Сидоров, Андреев, Казаков, Сергеев. Команды будут сформированы следующим образом. Первая команда: Иванов, Сидоров, Казаков. Вторая команда: Петров, Андреев, Сергеев. Пусть на поле одновременно находятся 2 игрока, тогда исходно на поле выйдут Иванов и Сидоров от первой команды, Петров и Андреев от второй.

После первой минуты игры Сидоров и Андреев пойдут на скамейку запасных, а на поле появятся Казаков и Сергеев. После второй минуты отдыхать пойдут Иванов и Петров, а Сидоров и Андреев вернутся на поле. Наконец, после третьей минуты Казаков и Сергеев снова пойдут отдыхать, а на площадке появятся Сидоров и Андреев. Таким образом после трех смен на поле будут (в алфавитном порядке) Андреев, Иванов, Петров и Сидоров.

Формат входных данных
Первая строка содержит три целых числа: \(n\), \(m\) и \(p\) (\(2p \le n \le 50\), \(1 \le p \le 10\), \(0 \le m \le 100\)). Следующие с \(n\) строк содержат по одной фамилии — игроки в том порядке, в котором они исходно построились Каждая фамилия представляет собой непустую последовательность букв латинского алфавита не длиннее 50. Все фамилии различны.

Формат выходных данных
Выведите в алфавитном порядке фамилии игроков, которые будут на поле после \(m\) смен составов. Разделяйте фамилии пробелом.

Профессор Хаос

Задачи на моделирование реализация

В секретной лаборатории профессора Хаоса проходит эксперимент по выращиванию особо опасных бактерий. В начале первого дня эксперимента у Хаоса имеется \(a\) особо опасных бактерий.

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

После извлечения бактерий из инкубатора \(c\) из них используются для проведения различных опытов и затем уничтожаются. Если после извлечения из инкубатора имеется менее \(c\) бактерий, для проведения опытов используются все имеющиеся бактерии, и эксперимент заканчивается.

Оставшиеся бактерии в конце дня необходимо поместить в контейнер и продолжить использовать в эксперименте. Однако в контейнер можно поместить не более \(d\) бактерий, поэтому если число оставшихся бактерий больше \(d\), то в контейнер помещаются \(d\) бактерий, а остальные уничтожаются.

Теперь профессор Хаос хочет выяснить, сколько особо опасных бактерий будет у него в контейнере после \(k\)-го дня эксперимента. Помогите ему найти ответ на этот вопрос.

Формат входных данных
В единственной строке входного файла содержится пять целых чисел \(a\), \(b\), \(c\), \(d\) и \(k\) (\(1 \le a, b \le 1000\), \(0 \le c \le 1000\), \(1 \le d \le 1000\), \(a \le d\), \(1 \le k \le 10^{18}\)).

Формат выходных данных
Выведите одно число — количество бактерий у Хаоса к концу \(k\)-го дня. Если эксперимент завершится в \(k\)-й день или ранее, выведите число 0.

 

Стековое кодирование

Стек Задача на реализацию Задачи на моделирование

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

Изначально вам дан пустой стек и пустой массив. Кодом массива \(a\) назовем последовательность действий вида

  • \(\mathtt{push}(x)\) — положить число \(x\) на вершину стека;

  • \(\mathtt{pop}\) — снять число с вершины стека;

  • \(\mathtt{print}\) — выписать в конец массива все элементы стека по порядку от нижнего к верхнему,

приводящую к тому, что в изначально пустой массив оказываются выписаны все элементы \(a\) по порядку. При выполнении третьей операции стек не очищается.

Например, при выполнении последовательности действий \(\mathtt{push}(1)\), \(\mathtt{push}(2)\), \(\mathtt{print}\), \(\mathtt{print}\), \(\mathtt{pop}\) и \(\mathtt{print}\) в массив оказываются выписаны числа \([1, 2, 1, 2, 1]\), а на стеке остается лежать только число \(1\). То есть такая последовательность является кодом массива \([1, 2, 1, 2, 1]\) длины \(6\).

Вам дан массив \(a\) и \(q\) запросов: какой у отрезка массива \(a\) с \(l_i\)-го по \(r_i\)-й элемент включительно минимальный по количеству действий со стеком код?

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

Формат входных данных
В первой строке ввода даны четыре целых числа \(n\) и \(q\) — длина массива \(a\), про отрезки которого спрашивается в запросах, количество запросов, а также максимальный балл за тест и параметр \(\gamma\), указанный в системе оценивания, которые ваше решение может игнорировать \((1 \le n \le 2000\); \(1 \le q \le 10^4\)).

Во второй строке перечислены \(n\) целых чисел \(a_i\) — элементы массива \(a\) (\(1 \le a_i \le 10^9\)).

В \(i\)-й из следующих \(q\) строк даны два целых числа \(l_i\) и \(r_i\) — границы отрезка из \(i\)-го запроса (\(1 \le l_i \le r_i \le n\)).

Формат выходных данных
Для каждого запроса выведите в отдельной строке целое число \(k\) от \(1\) до \(n + 1\) — количество действий в вашем коде соответствующего отрезка массива, после чего в следующей строке выведите через пробел \(k\) целых чисел, описывающих эти действия в порядке их выполнения:

  • для действия \(\mathtt{push}(x)\) выведите число \(x\) от \(1\) до \(10^9\);

  • для действия \(\mathtt{pop}\) выведите число \(-1\);

  • для действия \(\mathtt{print}\) выведите число \(0\).

Если в результате выполнения выведенных действий происходит попытка снять число с вершины пустого стека или в конце не получается массив, равный заданному отрезку массива \(a\), ваше решение получает вердикт Wrong Answer. Также вы получите вердикт Wrong Answer, если в вашем коде будет больше \(n + 1\) действия.

 

Нечестная игра

графы Обход в ширину Задачи на моделирование

На клетчатой доске размером \(n \times m\), состоящей из \(n\) строк и \(m\) столбцов, в клетке \((r, c)\), то есть на пересечении \(r\)-й сверху строки и \(c\)-го слева столбца, расположена фишка. На этой доске вам предстоит сыграть против компьютера в игру, в которой можно перемещать фишку и удалять клетки поля.

Каждый ход устроен следующим образом.

  1. Компьютер называет целое число \(k > 0\).

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

  3. Компьютер называет координаты \((i, j)\) произвольной еще не удаленной клетки поля, после чего она сразу же удаляется.

Если компьютер удаляет клетку, на которой находится фишка, игра заканчивается вашей победой. Ваша цель — победить как можно раньше. При этом вы не сообщаете компьютеру свои перемещения, поэтому можете играть нечестно: вместо реального перемещения фишки по полю вы можете следить за всеми возможными ее положениями. Иными словами, если в какой-то момент при удалении клетки \((i, j)\) существует последовательность перемещений фишки, при которой в данный момент фишка находится в точности в клетке \((i, j)\), вы можете сообщить компьютеру, что игра завершена, и вы победили.

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

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

Формат входных данных
В единственной строке ввода даны четыре целых числа \(n\), \(m\), \(r\) и \(c\) — размеры доски и координаты изначального расположения фишки (\(1 \le r \le n \le 1000\); \(1 \le c \le m \le 1000\)).

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

В следующих \(n \cdot m\) строках даны ходы, которые последовательно собирается сделать компьютер. Описание \(t\)-го хода задается тремя целыми числами \(k_t\), \(i_t\) и \(j_t\) — количеством перемещений фишки, которые вам понадобится совершить, и координатами клетки поля, которую после этого требуется удалить (\(1 \le k_t \le 10^9\); \(1 \le i_t \le n\); \(1 \le j_t \le m\)).

Гарантируется, что все удаляемые клетки различны, то есть никакая клетка не удаляется дважды.

Формат выходных данных
Выведите одно целое число от \(1\) до \(n \cdot m\) — номер хода, после которого вы сообщите компьютеру о своей победе.

 

Замечание

В первом примере можно, например, первым ходом передвинуть фишку из \((1, 1)\) в \((1, 2)\), а вторым — из \((1, 2)\) в \((2, 2)\) и затем в \((2, 1)\), тем самым поместив ее на удаляемую клетку.

Турнир ФХЛ

Разбор случаев Задачи на моделирование

Финальный турнир Флатландской Хоккейной Лиги (ФХЛ) играется между двумя командами-лидерами сезона. Команды играют матчи между собой до тех пор, пока одна из команд не выиграет ровно \(n\) матчей. Эта команда становится чемпионом ФХЛ. Каждый матч в финальном турнире заканчивается победой одной из команд, ничьих не бывает. Видеозаписи матчей публикуются на официальном сайте ФХЛ, так что все фанаты, которые пропустили матчи, могут посмотреть их в записи.

В этом году в финал вышли команды <<Капибары>> и <<Бурундучки>>. Петя и Вася очень любят хоккей, но во время турнира они были на сборах по информатике. Теперь они решили просмотреть все матчи финального турнира в записи, скачав их с официального сайта. Зайдя на сайт, они обнаружили, что в этом году финальный турнир ФХЛ состоял из \(k\) матчей. Скачав все видеозаписи, ребята начали их смотреть, но неожиданно поняли, что могут предсказать итог турнира, не досмотрев все матчи. Более того, они заметили, что про некоторые матчи они понимают, кто их выиграет, даже не начав смотреть запись.

Например, пусть \(n = 3\) и \(k = 4\). Петя и Вася сразу могут сделать вывод, что турнир закончится со счетом по матчам \(3:1\) или \(1:3\), ведь всего будет сыграно 4 игры. Пусть первый матч закончился победой команды <<Капибары>>, счет стал \(1:0\), второй матч также закончился победой команды <<Капибары>>, счет стал \(2:0\). Теперь ребята точно знают, что победителем турнира станет команда <<Капибары>>, ведь если бы турнир выиграла команда <<Бурундучки>>, то финальный счет был бы \(2:3\) и всего было бы сыграно 5 игр. Более того, команда <<Бурундучки>> гарантированно выиграет третий матч, иначе окончательный счет был бы \(3:0\), а команда <<Капибары>> "— четвертый матч.

По заданным \(n\), \(k\) и результатам игр определите, после какой игры Петя и Вася поймут, какая команда станет победителем турнира, а также про каждый матч определите, знают ли ребята победителя этого матча до того, как посмотрят его.

Формат входных данных
Первая строка ввода содержит два целых числа: \(n\) и \(k\) (\(1 \le n \le 100\), \(n \le k \le 2n-1\)). Вторая строка ввода содержит \(k\) целых чисел: \(i\)-е из них равно 1, если \(i\)-й матч выиграла команда <<Капибары>>, либо 2, если \(i\)-й матч выиграла команда <<Бурундучки>>.

Гарантируется, что по итогам турнира одна из команд выиграла ровно \(n\) матчей, причем ни одна из команд не выигрывает \(n\) матчей до того, как будут сыграны все \(k\) матчей, описанных во входных данных.

Формат выходных данных
Выведите две строки. Первая строка должна содержать одно число \(z\) (\(1 \le z \le k\)) "— номер матча, после которого ребята могут однозначно определить победителя турнира.

Вторая строка должна содержать \(k\) чисел, каждое из которых равно 0 или 1. Выведите 0 для матчей, победитель которых не известен до его просмотра, и 1 для тех матчей, победителя которых ребята могут однозначно предсказать, посмотрев все предыдущие матчи и зная числа \(n\) и \(k\).

Старт олимпиады

Вывод формулы Задачи на моделирование

Пандемия охватила все страны мира, и Берляндия не стала исключением. Даже на Всеберляндской олимпиаде по информатике были введены противовирусные меры.

Всего в олимпиаде участвуют \(n\) человек, и, чтобы соблюсти все предписания руководства, жюри олимпиады решило приглашать участников на тур по одному с интервалом \(x\) минут. Таким образом первый участник начнёт тур в момент времени \(0\), второй участник начнёт тур в момент времени \(x\), третий — в момент времени \(2 \cdot x\) и так далее.

Несмотря на разное время начала, длительность тура для каждого участника составляет ровно \(t\) минут. Из-за этого некоторые участники заканчивают писать тур раньше остальных. Когда участник заканчивает писать тур, величина недовольства организацией олимпиады для этого участника равна числу других участников, которые в текущий момент времени еще пишут или только начинают писать тур, но еще не закончили его.

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

Формат входных данных
В первой строке вводится единственное целое число \(n\) (\(1 \le n \le 2 \cdot 10^9\)) — число участников олимпиады.

Во второй строке вводится единственное целое число \(x\) (\(1 \le x \le 2 \cdot 10^9\)) — интервал в минутах между временами начала тура для участников.

В третей строке вводится единственное целое число \(t\) (\(1 \le t \le 2 \cdot 10^9\)) — длительность тура.

Формат выходных данных
В единственной строке выведите одно число — суммарное недовольство всех участников олимпиады.


Примечание

В первом примере первый участник начнёт писать тур в момент времени \(0\) и закончит в момент времени \(5\). К этому времени второй и третий участники уже начнут писать тур, поэтому недовольство первого участника будет равно \(2\).

Второй участник начнёт писать в момент времени \(2\) и закончит в момент времени \(7\). К этому моменту третий и четвёртый участники уже начнут писать тур, поэтому недовольство второго будет равно \(2\).

Третий участник начнёт писать тур в момент времени \(4\) и закончит в момент времени \(9\). К этому времени четвёртый участник уже начнёт писать тур, поэтому недовольство третьего будет равно \(1\).

Четвёртый участник начнёт писать тур в момент времени \(6\) и закончит в момент времени \(11\). В момент времени \(9\) уже никто не будет писать тур, поэтому недовольство четвёртого будет равно \(0\).

Таким образом, суммарное недовольство всех участников будет равно \(2+2+1+0=5\).

Во втором примере первый участник начнёт писать тур в момент времени \(0\) и закончит в момент времени \(2\). К этому моменту второй участник уже будет писать тур, а третий участник как раз начнёт в момент времени \(2\). Поэтому недовольство первого участника будет равно \(2\).

Второй участник начнёт в момент времени \(1\) и закончит в момент времени \(3\). К этому моменту только третий участник будет всё ещё писать тур.

Таким образом, суммарное недовольство всех участников будет равно \(2+1=3\).

Веревочки

Задачи на моделирование реализация

У Кати есть веревочка длиной \(n\) сантиметров.

Катя \(k\) раз выполняет следующую операцию: выбирает самую длинную веревочку из тех, что у неё есть, и разрезает ее на две веревочки. Катя каждый раз разрезает веревочку на две веревочки примерно равной длины, длина каждой из получившихся веревочек измеряется целым числом сантиметров. А именно: если длина веревочки, которую разрезает Катя, четная и равна \(2u\), то после разрезания получается две веревочки длины \(u\), а если она нечетная и равна \(2v+1\), то после разрезания получаются веревочки длиной \(v\) и \(v+1\).

Когда Катя закончила разрезать веревочку, она разложила получившиеся веревочки в порядке невозрастания длины и хочет ответить на \(q\) запросов: какая длина \(t_i\)-й веревочки в получившемся порядке.

Например, пусть \(n=100\) и \(k=5\). Тогда у Кати последовательно есть наборы веревочек следующей длины: \([100]\), \([50, 50]\), \([50, 25, 25]\), \([25, 25, 25, 25]\), \([25, 25, 25, 13, 12]\), \([25, 25, 13, 13, 12, 12]\).

Формат входных данных
На первой строке ввода дано целое число \(n\) (\(2 \le n \le 10^{18}\)).

На второй строке дано целое число \(k\) (\(1 \le k \le n-1\)).

На третьей строке дано целое число \(q\) (\(1 \le q \le k + 1\), \(1 \le q \le 5000\)).

На четвертой строке даны \(q\) целых чисел \(t_1, t_2, \ldots, t_q\) (\(1 \le t_1 < t_2 < \ldots < t_q \le k + 1\)).

Формат выходных данных
Выведите \(q\) чисел, \(i\)-е из выведенных чисел должно быть равно длине \(t_i\)-й по невозрастанию длине веревочки, которая в итоге есть у Кати.

Быстрый исполнитель

Задачи на моделирование реализация

Студент первого курса ИТМО Миша изучает новый примитивный язык программирования. В этом языке все операции производятся над массивами целых неотрицательных чисел длины \(n\).

Миша успел создать массив \(a\) и равный ему массив \(b\). Также он успел реализовать четыре функции:

  1. shift — делает циклический сдвиг массива \(a\) влево на \(d\), то есть при \(a = [a_0, a_1, \ldots, a_{n-1}]\) выполняет присваивание \[a \gets [a_d, \ldots, a_{n-1}, a_0, \ldots, a_{d-1}] \text{;}\]

  2. xor — присваивает в массив \(b\) его поэлементный xor (побитовое исключающее <<или>>) с массивом \(a\), то есть \[b \gets [a_0 \oplus b_0, a_1 \oplus b_1, \ldots, a_{n-1} \oplus b_{n-1}] \text{;}\]

  3. and — присваивает в массив \(b\) его поэлементный and (побитовое <<и>>) с массивом \(a\);

  4. or — присваивает в массив \(b\) его поэлементный or (побитовое <<или>>) с массивом \(a\).

Используя эти функции, Миша написал программу, задаваемую последовательностью операций xor, and и or длины \(m\). Программа в цикле \(p\) раз выполняет следующие действия: для каждой операции из последовательности сначала вызывается shift, а затем соответствующая этой операции функция. Так, для последовательности операций \([\mathtt{or}, \mathtt{xor}, \mathtt{and}]\) и \(p = 5\) программа будет выглядеть как

b = a = [...]
repeat 5 times {
    shift
    or
    shift
    xor
    shift
    and
}

К сожалению, язык еще новый, и его интерпретатор не справляется с выполнением такой программы. Помогите Мише определить, чему будет равно конечное состояние массива \(b\) после выполнения заданной программы.

Формат входных данных
В первой строке ввода перечислены четыре целых числа \(n\), \(m\), \(d\) и \(p\) — длина массива, количество операций в последовательности, величина сдвига и количество повторений (\(0 \le d < n \le 2 \cdot 10^5\); \(1 \le m \le 10\); \(1 \le p \le 10^9\)).

Во второй строке перечислены \(n\) целых чисел \(a_i\) — элементы массива \(a\), они же — изначальные значения элементов массива \(b\) (\(0 \le a_i \le 10^9\)).

В третьей строке через пробел перечисены \(m\) слов, каждое из которых равно <<xor>>, <<and>> или <<or>> — последовательность применяемых на каждой итерации цикла операций.

Формат выходных данных
Выведите \(n\) целых чисел — элементы массива \(b\) после выполнения описанной программы.

Перекладывание ответственности

Задачи на моделирование Задача на реализацию

При подготовке олимпиад у каждого разработчика есть своя зона ответственности. Обычно каждый разработчик полностью отвечает за подготовку какой-то определенной задачи, однако в этот раз жюри ИОИП решило поступить по-другому.

Всего в команде разработчиков \(n\) человек. Также есть \(n\) задач, которые необходимо подготовить. Подготовка \(i\)-й задачи требует подготовки ровно \(c_i\) ее элементов, и разработка каждого элемента \(i\)-й задачи имеет сложность \(w_i\).

Было решено, что каждый разработчик будет отвечать за столько же элементов, за сколько он бы отвечал, если бы разрабатывал целиком соответствующую задачу. Иными словами, \(i\)-му разработчику будет назначено ровно \(c_i\) элементов из различных задач. Распределение элементов по разработчикам происходит следующим образом:

  1. Сначала первому разработчику выдается \(c_1\) элементов, затем второму — \(c_2\), и так далее. Переход к \((i+1)\)-му разработчику происходит в тот момент, когда \(i\)-му назначается ровно \(c_i\) элементов.

  2. Элементы, за которые будет отвечать каждый разработчик, выбираются по одному из всех еще не до конца распределенных задач по очереди. Сначала будет выбран один этап из первой задачи, затем — из второй, из третьей, и так далее по кругу. Если в какой-то задаче не осталось нераспределенных этапов, она пропускается.

  3. Элементы, назначаемые очередному разработчику, выбираются начиная с той задачи, на которой остановился предыдущий разработчик. То есть, если последний элемент, назначенный предыдущему разработчику, был из \(x\)-й задачи, то первый элемент, назначенный следующему, будет из задачи \((x+1) \bmod n\) (если в ней еще остались нераспределенные элементы).

Иными словами, поддерживается набор еще не до конца распределенных задач и указатель \(x\) на <<текущую>> задачу. Когда надо выдать текущему разработчику очередной элемент, ему выдается один элемент из задачи \(x\), после чего \(x\) сдвигается по кругу вперед на следующую задачу.

Жюри считает, что такой способ позволяет более честно распределить сложность подготовки олимпиады. Определите суммарную сложность разработки элементов, доставшихся каждому из \(n\) разработчиков.

Формат входных данных
В первой строке дано целое число \(n\) — количество разработчиков (\(1 \le n \le 500\,000\)).

В \(i\)-й из следующих \(n\) строк через пробел даны два целых числа \(c_i\) и \(w_i\) — количество элементов в \(i\)-й задаче и сложность их разработки (\(1 \le c_i, w_i \le 10^9\)).

Формат выходных данных
В единственной строке выведите через пробел \(n\) чисел, \(i\)-е из которых равно суммарной сложности разработки элементов, доставшихся \(i\)-му разработчику.

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

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

SpamGPT-4

Вывод формулы Вычисление по заданной формуле Задачи на моделирование

Для тестирования отказоустойчивости двух лучших спам-ботов компании <<LinkedOut>> было решено настроить их на взаимодействие друг с другом и посмотреть, как долго они проработают в таком режиме без ошибок.

После старта оба бота отправляют друг другу по одному сообщению, после чего первый бот отправляет новое сообщение каждые \(a\) секунд, а второй — каждые \(b\) секунд. Иными словами, первый бот отправляет новое сообщение на секундах \(0\), \(a\), \(2a\), и так далее, а второй — на секундах \(0\), \(b\), \(2b\), и так далее.

Помимо этого, оба бота отправляют ответ на каждое полученное сообщение ровно спустя секунду после получения. Сообщения отправляются без задержки и приходят моментально после отправки. В частности, если в момент времени \(t\) первый бот отправит сообщение, то в момент времени \(t + 1\) он получит ответ на него, а в момент времени \(t + 2\) — отправит свой ответ. Также боты отлично выполняют параллельные задачи параллельно и могут отправлять любое количество сообщений одновременно (например, если надо одновременно отправить новое сообщение и ответы на полученные).

Вам даны параметры ботов \(a\) и \(b\). Определите, сколько сообщений каждый из ботов должен будет отправить к моменту времени \(T\), если они оба будут работать без ошибок.

Формат входных данных
В единственной строке ввода через пробел даны три целых числа \(a\), \(b\) и \(T\) — периодичности отправки новых сообщений и время работы ботов (\(1 \le a, b, T \le 10^9\)).

Формат выходных данных
Выведите через пробел два целых числа — количество сообщений, отправленных к моменту \(T\) первым и вторым ботом, соответственно. Если какие-то сообщения должны быть отправлены в \(T\)-ю секунду, их тоже следует учесть в ответе.


Замечание
Пояснение ко второму примеру:

  1. в момент времени \(0\) первый бот отправляет второму сообщение A, а второй первому — B;

  2. в момент времени \(1\) боты отправляют друг другу ответы на полученные на нулевой секунде сообщения: первый второму B(1) (ответ на B), а второй первому — A(1);

  3. в момент времени \(2\) новых сообщений не появляется, и они отправляют друг другу ответы на полученные на первой секунде сообщения: A(2) (ответ на A(1)) и B(2);

  4. в момент времени \(3\) будут отправлены B(3) и A(3), и одновременно с этим второй бот отправит первому новое сообщение C;

  5. в момент времени \(4\) первый отправит второму новое сообщение D, C(1) (ответ на C) и A(4), а второй первому — B(4);

  6. в момент времени \(5\) новых сообщений нет, боты отправляют друг другу ответы на полученные секунду назад сообщения;

  7. в момент времени \(6\) будут отправлены ответы на сообщения с предыдущей секунды, а также второй бот отправит первому новое сообщение E.

Итого, первый бот отправил: A, B(1), A(2), B(3), D, C(1), A(4), B(5), D(2), C(3) и A(6), всего 11 сообщений.

Второй бот тоже отправил ровно 11 сообщений: B, A(1), B(2), C, A(3), B(4), D(1), C(2), A(4), E и B(6).

Биржа - 2

Задача на реализацию Задачи на моделирование

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

Торги проходят в течении \(n\) дней, всего на рынке представлены акции \(m\) компаний, цены акций компании фиксированы в течении одного дня. Сделки бывают двух типов:

  • Купить \(x\) акций компании \(comp\)

  • Продать все акции компании \(comp\)

За каждую сделку надо заплатить 1% комиссии. Например, если купить 10 акций по 300 рублей, то суммарно заплатить придется 3030 рублей. Если же продавать 10 акций стоимостью 300 рублей каждая, то за них можно получить 2970 рублей.

Прибылью с продажи будем считать разность полученных при продаже денег и суммарно потраченных денег при покупках. Например, если 10 акций были куплены по 300 рублей, а затем еще 5 акций были куплены по 400 рублей, то в случае продажи по стоимости 500 прибыль составит: \(15 \cdot 500 \cdot 0.99 - (10 \cdot 300 \cdot 1.01 + 5 \cdot 400 \cdot 1.01) = 7425 - (3030 + 2020) = 2375\) рублей. При этом, акции могут быть проданы в убыток (за меньшую стоимость, чем были куплены), тогда прибыль с продажи будем считать отрицательной.

Суммарной прибылью в момент времени будем считать сумму всех прибылей с продаж, которые произошли до этого момента. Обратите внимание, что деньги, потраченные к этому моменту на покупку акций, которые еще не были проданы, не учитываются. Также будем считать, что у нас неограниченный бюджет для покупки акций, но рассматривать будем только прибыль. Число акций для покупки/продажи для каждой компании на рынке также не ограничено.

Вам даны \(k\) событий покупки/продажи. Необходимо найти минимальную суммарную прибыль среди всех моментов времени.

Входные данные
В первой строке входных данных содержится одно целое число \(t\) — число тестовых наборов (\(1 \le t \le 30\)).

Затем следуют \(t\) тестовых наборов. Каждый тестовый набор описывается следующим образом:

В первой строке тестового набора содержатся три целых числа \(n\), \(m\) и \(k\) — число дней, в которые проходят торги, число компаний на рынке и число событий, соответственно (\(1 \le n, m \le 100\), \(1 \le k \le 1000\)).

В следующих \(m\) строках записаны названия компаний и \(n\) чисел — стоимости акций компании в рублях в каждый из дней торгов. Названия компаний состоят из не более чем \(10\) строчных букв латинского алфавита и попарно различны. Стоимости акций — целые числа в диапазоне от \(1\) до \(10^5\) включительно.

В следующих \(k\) строках заданы события покупки/продажи в хронологическом порядке. Событие покупки задается в формате <день> buy <число акций> <название компании>, а событие продажи задается в формате <день> sell <название компании>. При этом <день> — целое число от \(1\) до \(n\), а <число акций> — целое число от \(1\) до \(1000\). Гарантируется, что все события следуют в порядке неубывания дней и корректны, а именно нет продаж некупленных акций и покупок акций, которых нет на рынке.

Выходные данные
Для каждого тестового набора выведите в отдельной строке минимальную прибыль среди всех моментов времени, с относительной или абсолютной погрешностью не более \(10^{-4}\).


Примечание

В первом тестовом наборе изначально до продаж суммарная прибыль равна \(0\), после первой продаже суммарная прибыль становится \(2375\) (случай разобран в примере).

Во втором тестовом наборе промежуточные прибыли равны \(0\), \(-11.11\) (акция продана дороже, но комиссия больше разницы) и \(1948.89\).

В третьем тестовом наборе промежуточные прибыли равны \(0\) и \(-2080\).

В четвертом тестовом наборе промежуточные прибыли равны \(0\) и \(979.9\), деньги потраченные на непроданные акции не учитываются.

Биржа

Задача на реализацию Задачи на моделирование

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

Торги проходят в течении \(n\) дней, всего на рынке представлены акции \(m\) компаний, цены акций компании фиксированы в течении одного дня. Сделки бывают двух типов:

  • Купить \(x\) акций компании \(comp\)

  • Продать все акции компании \(comp\)

За каждую сделку надо заплатить 1% комиссии. Например, если купить 10 акций по 300 рублей, то суммарно заплатить придется 3030 рублей. Если же продавать 10 акций стоимостью 300 рублей каждая, то за них можно получить 2970 рублей.

Прибылью с продажи будем считать разность полученных при продаже денег и суммарно потраченных денег при покупках. Например, если 10 акций были куплены по 300 рублей, а затем еще 5 акций были куплены по 400 рублей, то в случае продажи по стоимости 500 прибыль составит: \(15 \cdot 500 \cdot 0.99 - (10 \cdot 300 \cdot 1.01 + 5 \cdot 400 \cdot 1.01) = 7425 - (3030 + 2020) = 2375\) рублей. При этом, акции могут быть проданы в убыток (за меньшую стоимость, чем были куплены), тогда прибыль с продажи будем считать отрицательной.

Суммарной прибылью в момент времени будем считать сумму всех прибылей с продаж, которые произошли до этого момента. Обратите внимание, что деньги, потраченные к этому моменту на покупку акций, которые еще не были проданы, не учитываются. Также будем считать, что у нас неограниченный бюджет для покупки акций, но рассматривать будем только прибыль. Число акций для покупки/продажи для каждой компании на рынке также не ограничено.

Вам даны \(k\) событий покупки/продажи. Необходимо найти максимальную суммарную прибыль среди всех моментов времени.

Входные данные
В первой строке входных данных содержится одно целое число \(t\) — число тестовых наборов (\(1 \le t \le 30\)).

Затем следуют \(t\) тестовых наборов. Каждый тестовый набор описывается следующим образом:

В первой строке тестового набора содержатся три целых числа \(n\), \(m\) и \(k\) — число дней, в которые проходят торги, число компаний на рынке и число событий, соответственно (\(1 \le n, m \le 100\), \(1 \le k \le 1000\)).

В следующих \(m\) строках записаны названия компаний и \(n\) чисел — стоимости акций компании в рублях в каждый из дней торгов. Названия компаний состоят из не более чем \(10\) строчных букв латинского алфавита и попарно различны. Стоимости акций — целые числа в диапазоне от \(1\) до \(10^5\) включительно.

В следующих \(k\) строках заданы события покупки/продажи в хронологическом порядке. Событие покупки задается в формате <день> buy <число акций> <название компании>, а событие продажи задается в формате <день> sell <название компании>. При этом <день> — целое число от \(1\) до \(n\), а <число акций> — целое число от \(1\) до \(1000\). Гарантируется, что все события следуют в порядке неубывания дней и корректны, а именно нет продаж некупленных акций и покупок акций, которых нет на рынке.

Выходные данные
Для каждого тестового набора выведите в отдельной строке максимальную прибыль среди всех моментов времени, с относительной или абсолютной погрешностью не более \(10^{-4}\).


Примечание

В первом тестовом наборе изначально до продаж суммарная прибыль равна \(0\), после первой продаже суммарная прибыль становится \(2375\) (случай разобран в примере).

Во втором тестовом наборе промежуточные прибыли равны \(0\), \(-11.11\) (акция продана дороже, но комиссия больше разницы) и \(1948.89\).

В третьем тестовом наборе промежуточные прибыли равны \(0\) и \(-2080\).

В четвертом тестовом наборе промежуточные прибыли равны \(0\) и \(979.9\), деньги потраченные на непроданные акции не учитываются.

Алёна и таблички

Префиксные суммы(минимумы, ...) Задачи на моделирование

На уроке информатики маленькая девочка Алёна осваивает редактирование таблиц в одной очень известной программе.

Сейчас у неё есть таблица из целых чисел, состоящая из \(n\) строк и \(m\) столбцов. Через \(a_{i,j}\) будем обозначать число в \(i\)-й строке и \(j\)-м столбце. Будем говорить, что таблица отсортирована по неубыванию по \(j\)-му столбцу, если \(a_{i, j} \leq a_{i + 1, j}\) для всех \(i\) от \(1\) до \(n - 1\).

Учительница дала Алёне \(k\) заданий. Для каждого из заданий известны два числа \(l\) и \(r\) и требуется ответить на вопрос: если от таблицы оставить только строки с \(l\) по \(r\) включительно, то будет ли она отсортирована по неубыванию хотя бы по одному столбцу? Другими словами, существует ли такое \(j\), что \(a_{i, j} \leq a_{i + 1, j}\) для всех \(i\) от \(l\) до \(r - 1\) включительно.

Алёна ещё слишком маленькая, чтобы справиться с заданием самостоятельно — помогите ей!

Формат входных данных
В первой строке входных данных записаны два целых положительных числа \(n\) и \(m\) (\(1 \leq n \cdot m \leq 100\,000\)) — количество строк и столбцов в таблице соответственно. Обратите внимание, что дано ограничение только на произведение этих чисел, то есть на количество элементов таблицы.

В каждой из следующих \(n\) строк записаны \(m\) целых чисел, \(j\)-e число в \(i\)-й из этих строк соответствует значению \(a_{i, j}\) (\(1 \leq a_{i, j} \leq 10^9\)).

В следующей строке входных данных задано число \(k\) (\(1 \leq k \leq 100\,000\)) — количество заданий учительницы, которые нужно выполнить Алёне.

В \(i\)-й из последующих \(k\) строк числа \(l_i\) и \(r_i\) (\(1 \leq l_i \leq r_i \leq n\)).

Формат выходных данных
В \(i\)-й строке выведите “Yes”, если в таблице, полученной из исходной оставлением строк с \(l_i\) по \(r_i\) включительно будет столбец, по которому она отсортирована по неубыванию, и “No” в противном случае.


Замечание

В приведенном примере таблица не отсортирована ни по одному столбцу, но, например, строки 1–3 отсортированы по столбцу 1, а строки 4–5 по столбцу 3. В данной задаче 100 тестов, помимо тестов из условия, каждый из них оценивается в 1 балл. Результаты работы ваших решений на первых 60 тестах будут доступны во время соревнования. Результаты работы на остальных 40 будут доступны после окончания соревнования.

Решения, корректно работающие при \(1 \leq n, k \leq 100\) и \(m = 1\), наберут не менее 10 баллов.

Решения, корректно работающие при \(1 \leq n, m, k \leq 100\), наберут не менее 40 баллов.

Облако хештегов

Строки Задачи на моделирование

Вася ведёт публичную страницу организации “Мышь и клавиатура”, где постоянно публикует различные новости из мира спортивного программирования. Для удобства поиска по новостям Вася прикрепляет к каждой из них список хештегов. В данной задаче хештегом называется строка, состоящая из маленьких букв английского алфавита и ровно одного символа ‘#’, расположенного в начале строки. Длиной хештега будем называть количество символов в нём, без учёта символа ‘#’.

Начальство Васи распорядилось, что хештеги у каждой новости должны быть расположены в лексикографическом порядке (для пояснения смотрите примечания).

Поскольку вам не хочется менять порядок хештегов в уже написанной новости, вы решили удалить у некоторых хештегов некоторый суффикс (какое-то количество последних символов), при этом можно даже удалить весь текст хештега, оставив только символ ‘#’, но сам символ ‘#’ удалять нельзя. Из всех возможных вариантов такого удаления вы хотите выбрать тот, в котором суммарно будет удалено минимальное количество символов. Если и таких вариантов несколько, то разрешается использовать любой из них.

Формат входных данных
В первой строке находится одно число \(n\) (\(1 \leq n \leq 500\,000\)) — количество хештегов в новости.

Каждая из следующих \(n\) строк содержит ровно один хештег положительной длины.

Обозначим через \(L\) суммарную длину всех хештегов. Гарантируется, \(L\) не превосходит \(500\,000\).

Формат выходных данных
Выведите полученные после удаления символов хештеги.

Замечание

Слово \(a_1, a_2, \ldots, a_m\) длины \(m\) лексикографически меньше слова \(b_1, b_2, \ldots, b_k\) длины \(k\), если выполняется одно из двух:

  • либо в первой позиции \(i\), такой что \(a_i \neq b_i\), символ \(a_i\) идёт раньше по алфавиту, чем символ \(b_i\), то есть в первой различающейся позиции символ слова \(a\) меньше символа слова \(b\);

  • либо (если такой позиции нет) \(m < k\), то есть второе слово начинается с первого, но при этом не совпадает с ним.

Про последовательность слов говорят, что они идут в лексикографическом порядке, если каждое слово в нём (кроме последнего) лексикографически не превосходит следующее за ним.

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

Слово, состоящее только из символа ‘#’, лексикографически меньше любого другого хештега. Поэтому в третьем примере мы не можем оставить два первых слова и сократить два вторых.

В данной задаче 50 тестов, помимо тестов из условия, каждый из них оценивается в 2 балла. Результаты работы ваших решений на первых 35 тестах будут доступны во время соревнования. Результаты работы на остальных 15 будут доступны после окончания соревнования.

Решения, корректно работающие при \(1 \leq n, L \leq 15\), наберут не менее \(20\) баллов.

Решения, корректно работающие при \(1 \leq n, L \leq 1\,000\), наберут не менее \(50\) баллов.

Решения, корректно работающие при \(1 \leq n, L \leq 100\,000\), наберут не менее \(70\) баллов.

Устранение массива

реализация Задачи на моделирование

Дан массив \(a\) длины \(n\). Каждый элемент массива — \(0\), \(1\) или \(2\). Известно, что нули находятся только строго в левой половине массива, то есть на индесах от \(1\) до \(\left\lfloor\frac{n}{2}\right\rfloor\). Все оставшиеся элементы могут быть равны только \(1\) или \(2\).

С массивом разрешается выполнять следующие два вида действий:

  1. Заплатить две монеты и удалить из массива любое число \(a_i\). После такого действия массив \([a_1, a_2, \ldots, a_k]\) превращается в \([a_1, \ldots, a_{i-1}, a_{i+1}, \ldots, a_k]\).

  2. Заплатить одну монету и заменить два стоящих рядом числа \(a_i\) и \(a_{i+1}\) на \(a_i\) копий числа \(a_{i+1}\). То есть, возможны следующие преобразования:

Иными словами, \(0\) можно удалить вместе со следующим числом, \(1\) можно удалить саму по себе, если она стоит не в конце массива, а \(2\) можно заменить на следующее за ней число.

Определите, какое минимальное число монет требуется заплатить, чтобы превратить данный массив в пустой. Обратите внимание, что ответ всегда существует, потому что можно просто \(n\) раз применить первую операцию.

Формат входных данных
В первой строке дано единственное целое число \(T\) — количество наборов входных данных (\(1 \le T \le 100\)). Далее следуют \(T\) наборов входных данных.

Каждый набор входных данных начинается со строки, содержащей единственное число \(n\) — изначальную длину массива. В следующей строке через пробел перечислены целые числа \(a_1\), …, \(a_n\) — элементы массива (\(0 \le a_i \le 2\)).

Гарантируется, что сумма длин массивов по всем наборам входных данных не превосходит \(10^6\).

Формат выходных данных
Выведите \(T\) целых чисел, каждое в своей строке — ответы на задачу для каждого набора входных данных в том порядке, в котором оны даны во вводе.

 

Рамка для рисунка

Вывод формулы Задача на реализацию Задачи на моделирование

У Алексея есть набор, который состоит из n палочек длины 1 и m палочек длины 2. Палочки можно соединять между собой, либо выстраивая их в линию, либо под прямым углом. 

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

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

Формат входных данных
Первая строка входных данных содержит целое число n - количество палочек длины 1 (1 ≤ n ≤ 109). 
Вторая строка входных данных содержит целое число m - количество палочек длины 2 (1 ≤ n ≤ 109).

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

Замечание
В первом примере есть 5 палочек длины 1. Из них можно сложить квадрат со стороной 1, его площадь равна 1, при этом одна палочка останется.
Во втором примере есть 4 палочки длины 1 и 3 палочки длины 2. Из них можно сложить прямоугольник размера  2 x 3.
В третьем примере есть 3 палочки длины 1, из них невозможно сложить прямоугольник.

Массив сумм

Вывод формулы Задачи на моделирование

Юля выписала на доску n последовательных натуральных чисел aa+1, …, a+n−1 и написала под каждым из них сумму его цифр в десятичной записи, под i-м числом было выписано sumi.

После этого Юра стёр исходные числа и оставил только их суммы цифр. От вас требуется восстановить первое число в исходной последовательности a.
 


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

В первой строке содержится одно целое число n (2 <= n <= 100000) - длина исходной последовательности.

В следующей строке содержатся n целых чисел sum1, sum2, …, sumn (1 <= sum<= 90) - суммы цифр чисел исходной последовательности.

Гарантируется, что для всех тестов существует подходящее a, такое что 1 <= a <= 1018.


Выходные данные
Выведите одно число a (1 <= a <= 1018) - первое число исходной последовательности. В случае, если существует несколько подходящих a, можно вывести любое.

Примечание

В первом тестовом примере сумма цифр 1 равняется 1, сумма цифр 2 равняется 2, сумма цифр 3 равняется 3, что соотносится с массивом sum, поэтому a = 1 подходит под условие задачи.

Во втором тестовом примере сумма цифр 77 равняется 14, сумма цифр 78 равняется 15, сумма цифр 79 равняется 16, сумма цифр 80 равняется 8, сумма цифр 81 равняется 9, что соотносится с массивом sum, поэтому a = 77 подходит под условие задачи.

 
Примеры
Входные данные Выходные данные
1
3
1 2 3
1
2
5
14 15 16 8 9
77

Морской бой

Жадный алгоритм Задачи на моделирование реализация

В старом игровом автомате «Морской бой» игрок сбивает торпедами корабли, двигающиеся по игровому полю слева направо или справа налево.
В нашем варианте игры на поле может находиться одновременно несколько кораблей. Все корабли движутся с одинаковыми скоростями налево или направо. За одну секунду каждый корабль передвигается на единицу длины системы координат. Это означает, что через одну секунду после начала игры корабль, который находился в точке 20 и двигался направо, будет находиться в точке 21, а корабль, который находился в точке 30 и двигался налево, окажется в точке 29.
Вы можете выпускать торпеды, которые будут подбивать корабли. Торпеда, выпущенная в точке с какой-то координатой, уничтожает корабль, находящийся в этот момент в этой точке. При этом если в этой точке в этот момент времени окажется несколько кораблей, то торпеда подобьёт все эти корабли. Вы даже можете одновременно выпускать несколько торпед!
Подбейте все корабли, используя минимальное число торпед.

Входные данные
В первой строке содержится целое число N — количество кораблей, движущихся влево (с уменьшением координаты). Во второй строке содержится целое число M — количество кораблей, движущихся вправо (с увеличением координаты). Гарантируется, что 1 ≤ N + M ≤ 105, N > 0 и M > 0.
Следующие N строк содержат по одному целому числу li — начальные координаты кораблей,двигающихся влево. Следующие M строк содержат по одному целому числу ri — начальные координаты кораблей, двигающихся вправо. Координаты li идут в порядке возрастания, координаты ri также заданы в порядке возрастания. Гарантируется, что все начальные координаты li и ri чётные, различные и не превосходят по модулю 109.
Выходные данные
Программа должна вывести столько строк, сколько торпед необходимо для уничтожения всех кораблей, при этом i-я строка должна содержать два целых числа ti — время нанесения удара i-й торпедой и xi — координату удара i-й торпедой. Все ti и xi должны быть целыми, 0 ≤ ti ≤ 1018 , −1018 ≤ xi ≤ 1018. В один момент времени можно выпускать несколько торпед, в одну точку можно выпускать несколько торпед в разные моменты времени.

Примеры
Входные данные Выходные данные
1 2
1
10
30
20
0 10
5 25

Замечание
В примере из условия два корабля движутся влево и один корабль движется вправо. Начальные координаты кораблей, двигающихся влево, равны l1 = 10 и l2 = 30, а начальная координата корабля, двигающегося вправо, равна r1 = 20. В момент времени t1 = 5 в одной точке x1 = 25 окажутся два корабля — двигающийся влево из точки 20 и двигающийся вправо из точки 30. Их можно подбить одной торпедой. Оставшийся корабль, двигающийся влево, можно подбить, например, в момент времени t2 = 2 в точке x2 = 8.

Самолёт

Вывод формулы Задачи на моделирование

В салоне самолёта в одном ряду находится n кресел. Для удобства прохода и обсуживания пассажиров вдоль салона делается один или два прохода. Например, в салоне самолёта Sukhoi Superjet 100 в ряду 5 кресел и один проход (с одной стороны прохода два кресла, с другой стороны — три), а в самых больших современных самолётах — 10 кресел и два прохода (по три кресла по бокам салона у иллюминаторов и четыре кресла между проходами).


Предположим, что в будущем появятся самолёты большего размера, поэтому количество проходов придётся увеличить. Определите, какое минимальное число проходов должно быть в самолёте, в одном ряду салона которого находится n кресел. По бокам салона (у иллюминаторов) может находиться не более 3 кресел, а между двумя проходами — не более 4 кресел. При этом в салоне должен
быть хотя бы один проход.
Входные данные
Программа получает на вход одно натуральное число n, не превосходящее 2 · 109 , — количество кресел в одном ряду салона.
Выходные данные
Программа должна вывести единственное целое число — минимальное количество проходов, которое должно быть в салоне самолёта с n креслами в одном ряду.

 Примеры

Входные данные Выходные данные
1 10 2

Порадомой

Префиксные суммы(минимумы, ...) Задачи на моделирование

В один осенний день чебаркульская сборная по американскому футболу возвращалась на поезде домой после дружеского матча с командой Чебоксар. Подъезжая к очередной реке, главные тренеры футболистов — Алексей Юрьевич и Михаил Леонидович — заметили, что мост через реку на их пути не выглядит слишком надёжно, и, если несколько вагонов с суммарной массой больше W тонн будут целиком находиться на нём, переправа обязательно рухнет. Вагоны, которые находятся на мосту не полностью, не учитываются в суммарной массе.
Алексей Юрьевич, как самый ответственный тренер, точно знает, сколько весит каждый из вагонов поезда: i-й вагон от начала состава имеет массу ai тонн. Михаил Леонидович же имеет идеальное зрение, а потому может сказать, что длина моста равняется длине ровно p вагонов.
Крушения допустить никак нельзя, а потому тренеры приняли волевое решение: отцепить минимальное число вагонов (возможно, все) с конца состава, чтобы поезд смог проехать опасное место. Помогите им и скажите, сколько вагонов придётся оставить до переправы.
Входные данные
В первой строке входных данных через пробел записаны три целых числа n,p и W — количество вагонов в поезде, длина моста в вагонах и максимальная нагрузка в тоннах, которую он выдерживает (1 <= n <= 105, 1 <= p <=105, 0 <= W <=1014).
Во второй строке через пробел записаны n целых чисел ai — веса вагонов в порядке их следования от начала состава (1 <= ai <= 109).
Выходные данные
Выведите единственное число — минимальное количество вагонов, которое надо отцепить от хвоста поезда, чтобы тот смог безопасно проехать по мосту.
 

Примеры
Входные данные Выходные данные
1 4 2 10
5 3 4 8
1

Замечание
В данном тесте мост обрушится, только если на него заедут 3 и 4 вагон одновременно, а это значит, что достаточно отцепить лишь последний вагон.
 

Лес

Задачи на моделирование реализация

Миша заблудился в лесу и пытается выйти из него. Он проходит A шагов на север, затем B шагов на восток, затем C шагов на юг, D шагов на запад, после чего повторяет свои действия (снова A шагов на север, B шагов на восток, C шагов на юг, D шагов на запад и т.д.).
Оказалось, что для того, чтобы выйти из леса из его первоначальной точки, ему нужно было пройти ровно K шагов в любом из четырёх направлений, то есть первоначально Миша находится в центре квадрата со стороной 2K шагов. Определите, сколько шагов Миша сделает, прежде чем выйдет из леса (впервые окажется на границе леса).

Входные данные
Первые четыре строки входных данных содержат по одному целому положительному числу A, B, C, D — количество шагов, которое Миша делает на север, восток, юг, запад. Пятая строка входных данных содержит целое число K — расстояние от начального расположения Миши до четырёх сторон квадрата (границ леса). Все входные числа не превосходят 109.

Выходные данные
Программа должна вывести одно целое число — количество шагов, которое Миша сделает до выхода из леса. Гарантируется, что входные данные таковы, что Миша когда-нибудь выйдет из леса. 
Обратите внимание, что значение ответа может быть больше, чем возможное значение 32-битной целочисленной переменной, поэтому необходимо использовать 64-битные целочисленные типы данных (тип int64 в языке Pascal, тип long long в C и C++, тип long в Java и C#).
 

Примеры
Входные данные Выходные данные
1 1
1
2
3
3
13


Замечание
На рисунке изображён пример из условия. Миша делает 1 шаг на север (вверх), 1 шаг на восток (вправо), 2 шага на юг (вниз), 3 шага на запад (влево). От начального расположения Миши до стороны квадрата — 3 шага. Первоначальное расположение Миши и точка выхода из леса обозначены синими кругами. Путь Миши обозначен жёлтой линией. Миша пройдёт 13 шагов, прежде чем впервые окажется на границе леса.

Программа для Громозеки

Жадный алгоритм Задачи на моделирование

Когда  Громозека держит в руках сразу две печеньки с числами, он сразу пробует преобразовать большее число в меньшее. При преобразовании он использует только две команды: “Вычесть 1” и “Разделить на 2”, первая команда уменьшает число на 1, вторая команда уменьшает число в два раза, если оно чётное, иначе происходит ошибка. Громозека любит, чтобы преобразование происходило как можно быстрее. Помогите Громозеке составить последовательность команд, при которой из большего числа получится меньшее, причем за наименьшее количество команд.

Входные данные
Программа получает на вход два натуральных числа A и (по одному числу в строке). A >= B.

Выходные данные
Выведите последовательность команд преобразования. Каждая команда должна выводиться в отдельной строке. Первая команда обозначается, как -1, вторая команда как :2.
 
 

Примеры
Входные данные Выходные данные
1 21
2
-1
:2
:2
-1
:2

Гость из прошлого

Жадный алгоритм Задачи на моделирование

Коля Герасимов очень любит кефир, и в своём 1984 году он освоил все тонкости покупки этого чудесного напитка. Но однажды, как вам, наверное, известно, он попал в далёкий 2084 год, где покупка кефира представляет собой более сложный процесс.

Будущее будущим, а кушать хочется всегда, поэтому Коля отправился в местную молочную лавку. В 2084 году кефир продают в литровых пластиковых бутылках по a копеек за штуку и в литровых бутылках из стекла по b копеек за штуку. При этом пустую стеклянную бутылку можно сдать и получить назад c (c < b) копеек, а пластиковую бутылку сдать нельзя.

У Коли в кармане есть n копеек, и он очень голоден, поэтому хочет выпить как можно больше литров кефира. Так как в его время не было пластиковых бутылок, он совсем не знает, как действовать. Поэтому он обратился за помощью к вам, как к единственному знакомому в будущем.


Входные данные
В первой строке входных данных задаётся число n (1 <= n <= 1018)— количество копеек у Коли в кармане.
В строках со второй по четвертую по одному записаны числа ab и c (1 <= a <= 1018, 1 <= c < b <= 1018) - стоимость пластиковой бутылки с кефиром, стоимость стеклянной бутылки с кефиром и сколько копеек можно получить, сдав пустую стеклянную бутылку, соответственно.


Выходные данные
Выведите одно целое число — максимальное количество литров кефира, которое сможет выпить Коля.


Пояснения к примерам

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

 
Примеры
Входные данные Выходные данные
1 10
11
9
8
2
2 10
5
6
1
2

Мегазорды

Вывод формулы Задачи на моделирование

Мегазорд — необходимая вещь для защиты Земли. Для сборки одного мегазорда, необходимо ровно три зорда: зеленый, красный и синий.
Зеленому, красному и синему рейнджеру стало интересно, сколько у них есть различных способов собрать мегазорд. Для каждого рейнджера известен набор зордов, которыми он обладает. У зеленого рейнджера есть зеленые зорды, у красного рейнджера — красные, а у синего — синие.
При сборке мегазорда необходимо соблюдать три правила:

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

Входные данные
В первой строке входного файла заданы числа g, r и b — количество зордов у зеленого, красного и синего рейнджера соответственно (1 ≤ g, r, b ≤ 105).
В следующей строке находится g чисел xi — номера моделей, которые есть у зеленого рейнджера (0 ≤ xi ≤ 109).
В следующей строке находится r чисел yi — номера моделей, которые есть у красного рейнджера (0 ≤ yi ≤ 109).
В следующей строке находится b чисел zi — номера моделей, которые есть у синего рейнджера (0 ≤ zi ≤ 109).

Выходные данные
Выведите одно число — количество различных мегазордов, которые можно собрать.
 
Примеры
Входные данные Выходные данные
1 3 3 2
101 11 52
11 23 23
31 13
3


Замечание
Различные мегазорды из первого примера: 101 + 11 + 13, 52 + 23 + 31, 52 + 23 + 31. Последний мегазорд встречается дважды, так как красный ренжер мог взять либо второй, либо третий зорд. Обратите внимание, что собрать мегазорд 11+11+13 нельзя, так как при этом одна и та же модель будет использована дважны.

Рейнджеры в автобусе

Задачи на моделирование Линейные алгоритмы

Не каждый день могучие рейнджеры надевают свои костюмы. Сами посудите: как нелепо они бы смотрелись, скажем, в общественном транспорте, если бы не снимали их!
Это создаёт определённые трудности злодеям, которые хотят выследить их. Вот и сегодня Рита Репульса не может их поймать, потому что не знает, как они выглядят без костюмов.
Рита следит за автобусом, в котором, по её мнению, едет кто-то из рейнджеров. В салоне автобуса n рядов сидений, в каждом из которых по два места — слева и справа от прохода. Ряды пронумерованы от 1 до n, начиная с передней части автобуса. На конечной остановке в автобус по очереди зашли k человек, и Рита знает, кто на какое место сел и в каком порядке. Кроме того, ей известно, как каждый из рейнджеров выбирает себе место, когда заходит в автобус:

  •  Красный рейнджер любит сидеть впереди. Поэтому среди свободных мест он всегда выбирает место в ряду с наименьшим номером. Если же в этом ряду свободно два места, он садится слева от прохода.
  •  Синий рейнджер тоже любит сидеть впереди. Но, в отличие от красного, когда в ряду с наименьшим номером свободно два места, Синий садится справа.
  •  Чёрный рейнджер любит сидеть сзади. Среди свободных мест он всегда выбирает место в ряду с наибольшим номером, а если там свободно два места, то садится слева от прохода.
  •  Жёлтый рейнджер тоже, любит сидеть сзади. Но, в отличие от чёрного, когда в ряду с наибольшим номером свободно два места, жёлтый садится справа.
  •  Розовый рейнджер не имеет никаких предпочтений и может сесть на любое свободное место.
Про каждого из рейнджеров Рита хочет узнать, кто из k пассажиров мог бы быть им. По известным местам, куда садились пассажиры, выведите эту информацию. Обратите внимание, что совсем не обязательно все рейнджеры ехали на этом автобусе.

Входные данные
В первой строке заданы числа n и k — количество рядов в автобусе и количество пассажиров (1 ≤ n ≤ 109, 1 ≤ k ≤ min(2 · 105, 2n)).
В следующих k строках описаны пассажиры в том порядке, в котором они заходили в автобус.
В i-й из этих строк заданы числа xi и yi — место, на которое сел i-й пассажир (1 ≤ xi ≤ n, 1 ≤ yi ≤ 2), xi — это номер ряда, yi = 1, если это место слева от прохода, и yi = 2, если справа.
Все места, на которые сели пассажиры, различны.

Выходные данные
В первой строке выведите число s1 — количество пассажиров, которые могли бы быть красным рейнджером, а затем, через пробел, s1 чисел — номера этих пассажиров в порядке возрастания (пассажиры нумеруются с 1 по k в том порядке, в котором они заданы во входных данных).
В следующих четырёх строках выведите в том же формате информацию об остальных рейнджерах: синем, чёрном, жёлтом и розовом соответственно.
 
Примеры
Входные данные Выходные данные
1 3 4
1 1
1 2
3 2
2 1
3 1 2 4
1 2
0
1 3
4 1 2 3 4

Замечание

На этой картинке показаны места, на которые садились пассажиры в примере.
 

Экспресс тест

Задача на реализацию Алгоритмы обработки Задачи на моделирование

В данной задаче вам предлагается автоматизировать оценку результата экспресс теста.
Вам дана двухцветная картинка размером 10×20. Для обозначения цветов используются символы «#» и «.». Тест
считается отрицательным, если на картинке изображена одна вертикальная полоска и положительным, если три. В любом
другом случае тест считается испорченным.
Полоской будем считать область картинки 10×k, состоящую из символов «#», где k может быть произвольным. При этом
все соседние клетки с этой областью должны быть «.». Полоска может находиться на границе картинки.

Входные данные
В первой строке входных данных задано число t - число тестов (1 ≤ t ≤ 30). В следующих t⋅10+(t−1) строках заданы картинки
тестов. Соседние картинки разделены пустыми строками. После последней картинки, пустой строки нет.
Каждая картинка состоит из 10 строк по 20 символов, каждый из которых либо «#», либо «.».

Выходные данные
Для каждой картинки выведите результат теста в отдельной строке:
Negative - если тест отрицательный;
Positive - если тест положительный;
Incorrect - если тест испорчен.

 Примеры

Входные данные Выходные данные
1
4
.........##.........
.........##.........
.........##.........
.........##.........
.........##.........
.........##.........
.........##.........
.........##.........
.........##.........
.........##.........

.........##.........
.........##.........
.........##.........
.........#..........
.........##.........
.........##.........
.........##.........
.........##.........
.........##.........
.........##.........

..#.......#.....###.
..#.......#.....###.
..#.......#.....###.
..#.......#.....###.
..#.......#.....###.
..#.......#.....###.
..#.......#.....###.
..#.......#.....###.
..#.......#.....###.
..#.......#.....###.

..#.......#.....###.
..#.......#.....###.
..##......#.....###.
..##......#.....###.
..##......#.....###.
..##......#.....###.
..#.......#.....###.
..#.......#.....###.
..##......#.....###.
..#.......#.....###.
Negative
Incorrect
Positive
Incorrect

Путешествие по джунглям

Задачи на моделирование Линейные алгоритмы

Горилла Коко очень любит путешествовать по своим родным джунглям с помощью лиан.
Всего в джунглях есть N лиан, расположенных друг за другом и пронумерованных слева направо целыми числами от 1 до N. Расстояние между соседними лианами составляет D метров. Находясь на i-й лиане, Коко может совершить прыжок с нее не более, чем на ai метров вправо. В процессе прыжка Коко должна зацепиться за какую-то другую лиану, мимо которой будет пролетать.
В данный момент Коко висит на первой лиане и хочет переместиться как можно дальше вправо.
Помогите Коко и определите максимальный номер лианы, до которой она сможет добраться.

Входные данные
Первая стока входных данных содержит целое число N (2 ≤ N ≤ 105) — количество лиан.
Во второй строке записано целое число D (1 ≤ D ≤ 109) — расстояние между соседними лианами.
В каждой из следующих N строк записано целое число ai (1 ≤ ai ≤ 109) — на сколько метров вправо может прыгнуть Коко, находясь на i-й лиане.

Выходные данные
Выведите единственное целое число — максимальный номер лианы, до которой сможет добраться
Коко.
 

Примеры
Входные данные Выходные данные
1 5
3
7
8
2
2
6
4


Замечание
В примере из условия дано 5 лиан, а расстояние между лианами равно 3 метрам. Находясь на первой лиане, Коко может прыгнуть не более, чем на 7 метров, то есть она сможет допрыгнуть до второй и третьей лианы. Ей нужно остановиться на второй лиане, потому что со второй лианы длина прыжка равна 8 метрам, и это позволит ей допрыгнуть до четвёртой лианы. С четвёртой лианы длина прыжка равна 2 и это меньше, чем расстояние до следующей лианы, поэтому Коко остановится на четвёртой лиане.

Андрей и порталы

Задачи на моделирование Линейные алгоритмы

Андрей вот-вот опоздает на школьный этап ВсОШ. К счастью, недавно в его городе появились порталы.
Город, в котором живет Андрей, можно представить в виде прямой. Всего в городе успели построить N порталов. Портал с номером i расположен в точке с координатой xi . Если в текущий момент времени вы находитесь в одной точке с каким-нибудь порталом, то можете всего за одну секунду телепортироваться в любой другой портал вне зависимости от расстояния между ними. А время, требуемое для преодоления расстояния между точками с координатами p и q без использования порталов равно |p − q| секунд. Андрей является влиятельным гражданином, поэтому он может использовать систему порталов любое количество раз.
Изначально Андрей находится в точке s, а точка проведения олимпиады имеет координату e.
Помогите Андрею понять, как быстро он может попасть на олимпиаду, ведь каждая секунда на счету.

Входные данные
В первой строке входных данных записано одно целое число s — начальное положение Андрея.
Во второй строке записано одно целое число e — место проведения олимпиады. 
В третьей строке записано количество порталов N (2 ≤ N ≤ 2 · 105).
В каждой из N следующих строк записано целое число xi — координата портала с номером i.
Все числа s, e, xi по модулю не превосходят 108.

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

Входные данные Выходные данные
1 0
4
3
1
3
5
3


Замечание
Рассмотрим пример из условия. Если бы Андрей не мог пользоваться порталами, он бы смог добраться до точки проведения олимпиады за |0 − 4| = 4 секунды. Однако, можно действовать так:
1. Дойти до портала с номером 1 за |0 − 1| = 1 секунду.
2. Телепортироваться в портал с номером 2 за одну секунду.
3. Дойти от портала с номером 2 до точки проведения олимпиады за |3 − 4| = 1 секунду.
Суммарно получаем 1 + 1 + 1 = 3 секунды.

Раскраска Тюбика

реализация Задачи на моделирование

Художник Тюбик учит Незнайку рисовать. Он дал ему сетку с H строками и W столбцами. Все клетки сетки изначально выкрашены в белый цвет. Тюбик попросил Незнайку закрасить N из этих ячеек в черный цвет. I-я (1<=i<=N) ячейка, которую закрасил Незнайка, является ячейкой в ai-й строке и bi -м столбце. Для каждого целого числа j (0<=j<=9), определите сколько в сетке подпрямоугольников размером 3×3 содержит ровно j черных ячеек после того, как Незнайка закрасил N ячеек?

Входные данные
В первой строке заданы 3 целых числа: H, W (3<=H,W<=109) и N (0<=N<=min(105,H×W)). Далее идут N строк по 2 числа в каждом ai (1<=ai<=H) и bi (1<=bi<=W), 1<=i<=N, (ai,bi)≠(aj,bj), i ≠ j.

Выходные данные
Выведите 10 строк. В (j + 1)-й (0<=j<=9) строке должно быть указано количество подпрямоугольников размером 3 × 3 сетки, содержащей ровно j черных ячеек.
 

 

Примеры
Входные данные Выходные данные
1 4 5 8
1 1
1 4
1 5
2 3
3 1
3 2
3 4
4 4
0
0
0
2
4
0
0
0
0
0
2 10 10 20
1 1
1 4
1 9
2 5
3 10
4 2
4 7
5 9
6 4
6 6
6 7
7 1
7 3
7 7
8 1
8 5
8 10
9 2
10 4
10 9
4
26
22
10
2
0
0
0
0
0
3 1000000000 1000000000 0 999999996000000004
0
0
0
0
0
0
0
0
0

 

Цифры в умножении

Задачи на моделирование Задача на реализацию

Дано целое число N (\(1<=N<=10^{10}\)).
Для двух положительных целых чисел A и B определим \(F (A, B)\) как большее из двух: 
- количество цифр в десятичной записи числа A;
- количество цифр в десятичной записи числа B.
Например, \(F (3,11) = 2\), поскольку 3 состоит из одной цифры, а 11 - из двух.
Найдите минимальное значение \(F (A, B)\) среди всех пар положительных целых чисел A и B, таких что \(N = A \cdot B\).

Входные данные
На вход подается целое число N (\(1<=N<=10^{10}\)).

Выходные данные
Выведите на экран ответ на задачу.
 

 

Примеры
Входные данные Выходные данные Пояснение
1 10000 3 \(F(A,B) \) имеет минимальное значение при \((A,B)=(100,100)\).
2 1000003 7 Есть две пары A и B, таких чтобы выполнялость условие задачи: \((1,1000003)\) и \((1000003,1)\). Для этих пар, \(F(1,1000003)=F(1000003,1)=7\).
3 9876543210 6  

 

Расписание кружка

Задачи на моделирование Линейные алгоритмы

Володе очень понравились задачи олимпиады по информатике, поэтому он решил ходить на занятия кружка по программированию. Придя на первое занятие кружка, он узнал, что занятия будут проходить еженедельно в один и тот же день недели. Помогите Володе составить календарь занятий до конца года – определите даты всех занятий, начиная с первого занятия и до конца года.
Программа получает на вход два числа, записанных в разных строках: номер месяца и номер дня месяца, когда проходит первое занятие. Номер месяца может быть одним из четырёх возможных чисел – 9, 10, 11, 12. Номер дня месяца – число от 1 до 30 для сентября и ноября (месяцы с номерами 9 и 11) или от 1 до 31 для октября и декабря (месяцы с номерами
10 и 12). 
Программа должна вывести даты всех занятий кружка до конца года в хронологическом порядке, по одной дате в строке, сначала месяц, затем день месяца, через пробел. Занятия проходят еженедельно, в тот же день недели, что и первое занятие. Формат вывода дат такой же, как в условии. Считайте, что каникулы отсутствуют, а последнее занятие может происходить в любой день декабря, в том числе и 31 числа.
 

Примеры
Входные данные Выходные данные
1 11
20
11 20
11 27
12 4
12 11
12 18
12 25

Конфеты

Разбор случаев Задачи на моделирование

На столе стоят три вазы с конфетами. В левой вазе лежат A конфет, в средней вазе лежат B конфет, в правой вазе лежат C конфет. Лена съедает одну конфету из левой вазы,
затем – одну конфету из средней вазы, затем из правой, средней, левой, средней, правой, средней и т. д. (слева направо, затем налево, опять направо и т.д.)
Если Лена хочет взять конфету из какой-то вазы, а конфет там нет, она расстраивается и идёт спать. Определите, сколько конфет съест Лена.
Программа получает на вход три целых неотрицательных числа A, B, C – количество конфет в левой, средней, правой вазе. Сумма трёх данных чисел не превосходит 2×109.
 

Примеры
Входные данные Выходные данные Пояснение
1 3
3
3
7 Лена съест конфеты из левой, средней, правой, средней, левой, средней, правой вазы. После этого
она захочет съесть конфету из средней вазы, но в ней уже не осталось конфет.

Туристический налог

Линейные алгоритмы Задачи на моделирование

Для пополнения бюджета в стране Авалон, известной своими горными туристическими маршрутами, ввели новый налог для туристов. Величина налога
пропорциональна длине маршрута, но, поскольку маршрут проходит по горам и пройденное расстояние, зависящее от высоты спуска и подъёма, подсчитать сложно, налог считается без
учёта высоты, то есть величина налога пропорциональна горизонтальному перемещению, совершённому туристической группой. Кроме того, в силу старинного обычая все
туристические группы должны перемещаться по горам Авалона строго с запада на восток. Турфирма хочет сэкономить на налоге, поэтому она хочет разработать туристический
маршрут с минимальной величиной налога. При этом, поскольку маршрут является горным, он должен содержать подъём в гору и спуск с горы, то есть на маршруте должна быть точка,
которая находится строго выше начала и конца маршрута. 
Турфирма составила карту гор Авалона, содержащую информацию о высоте гор при передвижении с запада на восток. Высоты гор измерены в точках через равные расстояния. 
Найдите на данной карте гор Авалона туристический маршрут минимальной длины, удовлетворяющий условию наличия подъёма и спуска.
Первая строка входных данных содержит число N – количество точек на карте гор Авалона. Следующие N строк содержат информацию о высоте гор в данных N точках при движении с запада на восток. Все числа натуральные, не превосходящие 105.
Программа должна вывести два числа – номер точки начала маршрута и номер точки окончания маршрута. Точки нумеруются от 1 до N. Если маршрута, удовлетворяющего
условиям, не существует, программа должна вывести одно число 0.

Примеры
Входные данные Выходные данные Пояснение
1 7
18
10
15
20
20
10
3
3
6
Дано 7 точек с высотами 18, 10, 15, 20, 20, 10, 3. Самый короткий маршрут, содержащий подъём и
спуск, – это 15, 20, 20, 10. Он начинается в точке номер 3 и заканчивается в точке номер 6.
 
2 3
9
8
5
0 Высота гор монотонно убывает, поэтому искомого маршрута не существует.

Таблица

Вывод формулы Задачи на моделирование

Бесконечную таблицу, строки и столбцы которой пронумерованы целыми числами начиная с 1 сверху вниз и слева направо, заполняют целыми числами 1, 2, 3 и т.д. Числа выписываются в
соседние клетки по границам квадратов увеличивающегося размера (см. рисунок).


Формат входных данных
Программа получает на вход одно целое число n, 1 ≤ n ≤ 1018
Формат выходных данных
Программа должна вывести два целых числа: номер строки и номер столбца, в которых находится число n в этой таблице. Запись выводимых чисел должна содержать только цифры, вывод
действительных чисел в ответе считается неверным.

Примеры
Входные данные Выходные данные
1 15 4 2

Робот

Задача на реализацию Задачи на моделирование Разбор случаев

Некоторый заводской цех представляет собой прямоугольник размером M на N метров (1 <= M, N <= 30). Инженер-конструктор Петя создал робота, который  может перемещаться по территории цеха и выполнять некоторую общественно-полезную работу. Робот может перемещаться только по плитам, размером 1 на 1 метр, которыми выложен пол цеха, и только параллельно осям координат.

У робота есть 4 регистра состояния, A, B, C и D. Каждый регистр может принимать одно из двух значений - TRUE или FALSE. На некоторых плитах цеха стоят радио-триггеры, которые переключают состояние каких-то регистров робота. Также на некоторых других плитах могут находиться радиомаяки, которые в зависимости от истинности формулы, соответствующей данному маяку, заставляют робота повернуть на 90 градусов налево или направо. В случае истинности совершается поворот направо.

Спецслужбы заинтересовались разработкой Пети, и решили проверить пригодность робота для работ в условиях радиации, под водой, в кратерах вулканов, на других планетах и много где еще. Для испытаний из цеха было вынесено все оборудование, поставлено некоторое количество радиомаяков и триггеров. Начиная с некоторой пустой плиты X0, Y0 под начальным углом A0 (0,90,180 или 270 градусов, отсчитывая от направления вверх по часовой стрелке) был запущен робот. Изначально состояния всех регистров робота - FALSE.

Аккумуляторных батарей робота хватит на K (0 < K <= 109) перемещений на соседнюю плиту. После этого он остановится. Кроме того, возможен такой вариант, что Петя неправильно расставил триггеры и маяки, поэтому на некотором шаге робот врежется в стену цеха. Необходимо определить, уцелеет ли робот после испытаний и на какой клетке он остановится в случае положительного ответа на первый вопрос.

Оси координат направлены из левого верхнего угла - точки (1,1) - соответственно вправо и вниз. M - размер цеха по горизонтали, а N - по вертикали. Количество триггеров - P - не превосходит 10000, а радиомаяков - Q - 25.

Входные данные
На первой строке входного файла записаны 8 чисел - M,N,P,Q,K,X0,Y0,A0. Далее на Р строках записаны триггеры в формате "X Y R", где R - название регистра. Далее на Q строках записаны радиомаяки в формате "X Y F", где F - булева функция от переменных A..D длиной не более 250 символов, заданная корректной формулой, причем:

-    A, B, C, D, TRUE, FALSE – корректные формулы
-    Если F – корректная формула, то «(F)» и «NOT F» – корректные формулы 
-    Если F и G – корректные формулы, то «F AND G», «F OR G» и «F XOR G» – корректные формулы 
-    Операция NOT имеет наивысший приоритет, остальные операции имеют одинаковые приоритеты и выполняются слева направо, т.е. A AND NOT B OR C XOR D эквивалентно (((A AND (NOT B)) OR C) XOR D)
-    регистр букв не имеет значения
-    корректная формула не содержит лишних пробелов
Выходные данные
В случае успешного исхода вывести координаты плиты, где остановится робот. В случае краха эксперимента вывести в выходной файл единственное число «-1».

Примеры
Входные данные Выходные данные
1 8 8 1 9 420000001 3 4 180
3 3 A
3 5 FALSE
6 5 FALSE
6 2 FALSE
3 2 A    
3 1 FALSE
1 1 FALSE
1 8 FALSE
2 8 FALSE
2 2 TRUE
3 5


Примечание

В соответствии с рисунком, робот будет двигаться по «восьмерке» суммарной длиной 42 метра. Следовательно, прохождение 42n+1 метра эквивалентно прохождению 1 метра, т.е. робот остановится на плите с координатами 
«3 5».
 

Треугольный ключ

реализация Задачи на моделирование

У Индианы Джонса есть ключ от двери, ведущей к тайным богатствам инков. Ключ имеет форму правильного треугольника, который, в свою очередь, разбит на n2 маленьких правильных треугольников, в каждом из которых написана одна десятичная цифра. Пример ключа приведен ниже на рисунке.


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


Поскольку вы не хотите смерти Индианы и хотите получить свою долю сокровищ, вам придется помочь ему!

Входные данные
В первой строке входного файла содержится одно целое число n (1 ≤ n ≤ 100). В следующих n строках описан сам треугольник. Строка входного файла, имеющая номер i + 1, содержит 2i - 1 цифру — содержание i-й строки ключа-треугольника.

Последняя строка содержит слово counterclockwise, если треугольник необходимо повернуть против часовой стрелки, и clockwise в противном случае.

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

Примеры
Входные данные Выходные данные
1 3
1
2 3 4
5 6 7 8 9
counterclockwise

4 8 7 
1 3 2 6 5 
2 3
1
2 3 4
5 6 7 8 9
clockwise

7 6 2 
9 8 4 3 1 

Таблица

Жадный алгоритм Задачи на моделирование

В новой математической игре для одного игрока «Таблица чисел» используется таблица размером n строк на m столбцов, заполненная целыми числами. За один ход игрок выбирает одну из строк или один из столбцов и меняет знак на противоположный у всех чисел этой строки или столбца.

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

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

Входные данные
Первая строка входного файла содержит два целых числа: n и m (2 ≤ n, m ≤ 100). Каждая из последующих n строк содержит по m целых чисел ai,j (|ai,j| ≤ 100).

Выходные данные
В первой строке выходного файла выведите k — число ходов, которые необходимо выполнить, или «-1», если цели игры добиться невозможно. В первом случае в последующих k строках выведите описание этих ходов.

Описание каждого хода должно быть выведено в отдельной строке, которые должны содержать: тип хода («R» — на этом ходе выбирается строка или «C» — на этом ходе выбирается столбец) и номер соответствующей строки или столбца. Строки и столбцы нумеруются натуральными числами начиная с единицы, строки нумеруются сверху вниз, а столбцы — слева направо.

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

Примеры
Входные данные Выходные данные
1 2 2
-1 -3
1 -2
1
C 2
2 3 2
-1 -1
-1 -1
-1 -1
3
R 1
R 2
R 3

Гонки на машинках

Вычисление по заданной формуле Задачи на моделирование

Как и у каждого мальчика, у Феди есть игрушечные машинки. Однако ему повезло больше, чем обычному мальчику — все n его машинок являются радиоуправляемыми. Целыми днями он может устраивать различные автогонки и играть с друзьями.

Из всех видов гонок Федя предпочитает гонки по прямой. В данном формате соревнования трасса имеет форму прямой и является бесконечной (соревнования идут до тех пор, пока Феде это не надоест). Изначально каждая из n машинок находится на некотором расстоянии от старта — имеет фору xi метров. По команде все машинки начинают свое движение от старта, при этом каждая машинка движется во время гонки с постоянной скоростью vi метров в секунду. Все машинки движутся в одном направлении — удаляются от старта.

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

Так как этого события можно ждать очень долго, Федя хочет настроить камеру на автоматическое включение во время обгона. Однако, Федя самостоятельно не может найти время, которое пройдет со времени начала гонки до времени первого обгона. Помогите Феде — напишите программу, находящую искомую величину.

Входные данные
В первой строке входного файла содержится единственное число n — количество машинок на трассе (2 ≤ n ≤ 100). Каждая из следующих n строк содержит по два целых числа xi и vi — расстояние от старта (в метрах) и скорость машинки i (в метрах в секунду) соответственно (1 ≤ xi, vi ≤ 1000).

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

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

Примеры
Входные данные Выходные данные Пояснение
1 2
1 3
4 2
3.00000 На рисунке точкой A обозначено место обгона.
2 2
12 20
2 21
10.00000  

Наберите текст

Задача на реализацию Задачи на моделирование

В новой модели сотового телефона разработчики предусмотрели только 5 кнопок: «стрелка вверх», «стрелка вниз», «стрелка вправо», «стрелка влево» и «Ok». Чтобы набрать номер телефона, на экран выводится виртуальная клавиатура в виде такой таблицы:
 

1 2 3
4 5 6
7 8 9
выход 0 звонок

По ячейкам этой таблицы пользователь телефона может перемещать курсор вверх, вниз, вправо или влево. Для выбора цифры необходимо нажать кнопку «Ok». После набора всех цифр пользователь должен подвинуть курсор на ячейку «звонок» и нажать «Ok». Таблица не «зациклена» (это означает, что нажатие кнопки «вправо», например, из ячейки с цифрой 6 не приведет к перемещению курсора).

При вызове экранной клавиатуры курсор находится на кнопке с надписью «выход».

По заданному семизначному номеру телефона определите, сколько нажатий кнопок должен сделать пользователь, чтобы позвонить по этому номеру.

Входные данные
Во входном файле задан номер телефона, содержащий ровно 7 цифр.

Выходные данные
В выходной файл выведите одно число — минимальное количество нажатий суммарно на все кнопки, которое необходимо, чтобы совершить звонок по этому номеру.
 
Примеры
Входные данные Выходные данные
1 0800000 12
2 1234567 24

Том и Джерри

Задачи на моделирование реализация

В этой задаче мы снова возвращаемся в младшую группу детского сада «Телепузики». Чтобы окончательно успокоить детей, воспитательница решила включить им мультик про Тома и Джерри. Серия, которую сейчас смотрят дети, довольно-таки незамысловата — в ней Джерри развесил по потолку комнаты наковальни на веревках. Когда Том оказывается под очередной наковальней, Джерри перерезает веревку. Наковальня падает на Тома, Тому больно, всем остальным весело, дети смеются. В общем, вполне обычная серия.

А вам нужно по кадру из этой серии определить, упадет ли наковальня на Тома, если Джерри перережет веревку.

Входные данные
Вам дана ASCII-арт картинка, то есть картинка, нарисованная символами. На ней есть наковальня, привязанная веревкой к потолку, и кот Том. В первой строке даны числа N, M (4≤N≤100, 1≤M≤100 ). Следующие N строк состоят из M символов каждая, и представляют собой саму картинку. Картинка устроена следующим образом:

  • Первые K1 строк в одной и той же позиции X1 стоит символ «|», в остальных — пробел. Это веревка.
  • Следующие K2 строк в одних и тех же позициях с X2 по X3 стоит символ «#», в остальных — пробел. Это наковальня.
  • 2×X1=X2+X3, то есть наковальня подвешена за середину.
  • Следующие K3 строк содержат только пробелы. Это пустота между наковальней и котом.
  • Следующие N − K1 − K2 − K3 строк содержат произвольные символы. Любой символ, кроме пробела — часть кота. Существует хотя бы один непробельный символ.
Числа K1, K2, K3 и N − K1 − K2 − K3  ненулевые.
Выходные данные
Выведите «YES», если при падении наковальня заденет Тома, в противном случае выведите «NO».
 
Примеры
Входные данные Выходные данные
1 13 29
          |                  
          |                  
          |                  
    #############            
    #############            
    #############            
                             
                             
            /\_/\            
            >^.^<.---.       
           _'-`-'     )\     
          (6--\ |--\ (`.`-.  
              --'  --'  ``-' 
YES
2 16 30
    |                         
 #######                      
 #######                      
 #######                      
 #######                      
                              
            ,                 
           \)\_               
          /    '. .---._      
        =P ^     `      '.    
         `--.       /     \   
         .-'(       \      |  
        (.-'   )-..__>   , ;  
        (_.--``    (__.-/ /   
                .-.__.-'.'    
                 '-...-'      
NO

Жук в деревне

Вывод формулы Задачи на моделирование

Однажды утром во время традиционной инспекции картофельного поля кот Матроскин обнаружил на одном из кустиков колорадского жука. Придя в ужас, он тут же помчался расспрашивать дядю Фёдора (как наиболее образованного из друзей) о том, как эти жуки размножаются и как с ними бороться.

Картофельные поля обычно очень аккуратно устроены: кусты картофеля рассажены на них так, что образуют клетчатое поле, где каждая клетка — картофельный куст. Как только на каком-то из кустов появляется колорадский жук, он начинает активно есть и размножаться. Поэтому каждый час на каждый куст будет добавляться столько же жуков, сколько соседних с ним по стороне кустов, уже зараженных жуками. Например, если у куста ровно один сосед, на котором уже есть жуки, то на него добавится один жук, а если все четыре соседа заражены жуками, то на куст добавится четыре новых жука. И если жуков не остановить, они заполнят собой все поле. Но к счастью, когда-то давно дядя Фёдор, прочитав статью в «Мурзилке», сделал отпугиватель колорадских жуков...

Если честно, Матроскин не очень понял, как работает этот отпугиватель. Но главное он запомнил: его надо установить на один из кустиков картофеля, и как только на этом кустике окажется ровно k колорадских жуков, что-то (вот этого Матроскин и не понял) произойдет и все жуки сбегут с поля.

Зная координаты куста картофеля, на который Матроскин установил отпугиватель, посчитайте, через сколько часов после появления первого колорадского жука на поле он подействует. Матроскин поставил ловушку в первый час после появления жука на поле.

Входные данные
Вам даны три числа: x и y — координаты кустика картофеля, на который Матроскин установил отпугиватель, и k — параметр отпугивателя (1<=k<=109, |x|<=109, |y|<=109  ). Тот из кустов, на котором был найден первый жук, имеет координаты (0, 0) . Координаты всех кустов поля не превосходят 109+1 по модулю.

Выходные данные
Выведите одно целое число: через сколько часов ловушка сработает. Если же ловушка никогда не сработает, выведите −1.

Примеры
Входные данные Выходные данные
1  0 0 1 0
2 0 0 5 2

Разнообразное питание

Жадный алгоритм Задачи на моделирование

Увлекшись машинным обучением, Вася совсем забыл про свои экзамены в университете, завалил их и пошел служить в армию. Однако, и тут ему пригодились его навыки программиста — у работников столовой возникла проблема с тем, что блюда постоянно повторяются, и солдаты начали слишком этому возмущаться. Узнав, что Вася разбирается в программировании, работники попросили его написать программу, которая сделает распределение блюд.
Работники столовой считают, что единственное, что характеризует распределение блюд — их «степень монотонности» — число одинаковых блюд, которые даются в последовательные приемы пищи. То есть, если представить расписание блюд как массив a, то «степень монотонности» будет равна количеству индексов i, таких что ai = ai - 1. Для начала вас просят найти не само распределение блюд, а хотя бы минимальную возможную «степень монотонности», которую можно было бы получить некоторой перестановкой заданного набора блюд. Помогите армейской столовой!
Входные данные
В первой строке содержится число n — количество блюд, которые должны войти в расписание (1 ≤ n ≤ 100).
В следующей строке содержится n чисел ai — блюда (1 ≤ ai  ≤ 100). Одинаковые блюда обозначены одинаковыми числами, разные — разными.
Выходные данные
В единственной строке выведите одно число — минимальное возможное значение «степени монотонности».
 

Ввод Вывод
5
1 2 3 1 1
0
6
1 1 2 3 1 1
1

Свойства объектов - 2

Задача на реализацию Задачи на моделирование

В хранилище Васи находится n объектов, пронумерованных от 1 до n, у каждого из которых есть некоторое количество свойств (возможно, ни одного). Каждое свойство представлено в виде натурального числа от 1 до 109.
Проанализировав устройство своего хранилища, Вася решил, что оно должно поддерживать две операции:
 -  Удаление устаревшего свойства c. При удалении свойства, оно удаляется у всех объектов, которым принадлежит. Если указанного свойства не существует, ничего делать не нужно.
 -  Найти количество удаленных свойств у объекта r
Васе очень нужно реализовать эту функциональность, и он обратился к вам за помощью. Помогите ему - напишите программу, которая будет поддерживать обе операции, нужные Васе.

Формат входных данных
В первой строке входного файле содержится число n - количество объектов в хранилище Васи (1 <= n <= 105). В i-й из следующих n строк содержится описание свойств объекта с номером i: сначала дано число ki - количество свойств у i-го объекта, а затем через пробел даны ki чисел pi,j - свойства i-го объекта (0 <= ki <= 100, 1 <= pi,j <= 109).
Все объекты пронумерованы от 1 до n в порядке, представленном во входных данных. Гарантируется, что общее количество свойств у всех объектов не превосходит 105. Также гарантируется, что для каждого i все pi,j различны.
В n + 2 строке содержится число q - количество запросов к хранилищу Васи (1 <= q <= 105).
В j-й из следующих q строк содержится информация об j-м запросе:
- c, если из хранилища требуется удалить устаревшее свойство c (1 <= c <= 109);
? r, если требуется найти количество оставшихся свойств у объекта с номером r.

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

Ввод Вывод
2
3 1 2 4
3 2 3 5
12
- 1
? 1
? 2
- 2
? 1
? 2
- 5
? 1
? 2
- 6
? 1
? 2
1
0
2
1
2
2
2
2

Замечание
Свойство 1 есть только у первого объекта, поэтому после его удаления у первого объекта 1 удаленное свойство, а у второго все еще 0.
Свойство 2 есть у обоих объектов, поэтому оно удаляется у обоих объектов, у первого объекта теперь 2 удаленных свойства, а у второго 1.
Свойство 5 есть только у второго объекта, поэтому после его удаления у обоих объектов становится 2 удаленных свойства.
Свойства 6 нет ни у одного объекта, поэтому его удаление не меняет количество удаленных свойств у объектов.
 

Космические шахматы

реализация Задачи на моделирование

В космические шахматы играют на бесконечной доске, поэтому клетки нумеруют парой чисел (см. пример и рисунок к нему). Фигуры ходят по обычным правилам. Составьте маршрут шахматного коня из клетки (0; 0) в заданную клетку (x; y).
Напомним, что конь за один ход перемещается на одну клетку по одной оси и на две по другой, то есть, например, из клетки (0; 0) он за один ход может попасть в клетки (1; 2), (2; 1), (-1; 2), (2; -1), (1; -2), (-2; 1), (-1; -2) и (-2; -1).

В качестве ответа Вам нужно вывести любой (не обязательно кратчайший) маршрут с началом в (0; 0) и концом в (x; y), длина которого не больше 105 ходов.

Формат входных данных
Программа получает на вход два целых числа x и y, записанных в отдельных строках, - координаты конечной клетки маршрута коня. Клетка (x; y) не совпадает с началом координат. |x| <= 105, |y| <= 105.

Формат выходных данных
Программа должна вывести последовательность ходов, один ход в отдельной строке. В i-й строке должно быть выведено два числа xi и yi через пробел - координаты клетки, в которой окажется конь после i-го хода. Количество ходов не должно превышать 105. Последний ход должен вести в заданную клетку
 

Ввод Вывод
-2
2
-2 1
0 2
-1 0
-2 2

Рисунок к примеру

Мячи по сеткам

Вычисление по заданной формуле Задачи на моделирование

На складе в коробки упаковывают волейбольные мячи. Сначала мячи пакуются в сетки ровно по  N штук в каждую, а потом сетки - в коробки, причем в одну коробку помещается не более L сеток. Последняя коробка может быть неполная. Всего имеется М мячей.  Сколько всего понадобится коробок, сколько сеток будет в последней коробке и сколько мячей останется на складе не упаковано  (упаковать нужно как можно больше мячей)? Написать программу: вводятся три числа целых M, L, N в одной строке; вывести три числа в одной строке - сначала количество потребовавшихся коробок, затем количество сеток в последней коробке, а затем количество не упакованных мячей
 
Примеры

Входные данные Выходные данные
1 40 4 3 4 1 1
 

Условное форматирование

поиск в глубину и подобное Задачи на моделирование

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

  •  Налить воду в первую колбу до края (после этого в ней будет a миллилитров воды)
  •  Полностью вылить воду из первой колбы
  •  Налить воду во вторую колбу до края (после этого в ней будет b миллилитров воды)
  •  Полностью вылить воду из второй колбы
  •  Перелить воду из первой колбы во вторую. В этом случае, если во второй колбе достаточно места, чтобы уместить всю текущую воду первой колбы, вода из первой колбы переливается полностью во вторую. Если же во второй колбе места недостаточно, вторая колба заполняется до предела (в ней после этого будет b миллилитров воды), а в первой колбе остается все остальное.
Состоянием колб Вася называет упорядоченную пару (x, y), где x — текущее количество воды в первой колбе, а y— во второй. Вася хочет изучить поставленную самим собой задачу и понять, сколько различных состояний он может получить описанными выше переливаниями.
Входные данные
В единственной строке входного  через пробел записаны два натуральных числа a и b (1 ≤ a, b ≤ 100) — емкости первой и второй колбы соответственно.
Выходные данные
В единственной строке выходного выведите одно число — число различных состояний, которое можно получить описанными в задаче переливаниями воды.
 
Ввод Вывод
2 5 14

Поле для игры

Задача на реализацию Задачи на моделирование

Петя создает поле для своей новой игры. Поле разделено на клетки и представляет собой прямоугольник размером N на M клеток. Пусть клетки имеют координаты от 1 до N слева направо по горизонтали и от 1 до M снизу вверх по вертикали.

На этом поле Петя уже разместил супермаркет, который представляет собой прямоугольник размером C на D клеток (C –– размер по горизонтали, D –– по вертикали), и нижняя левая клетка супермаркета имеет координаты AB на игровом поле (см. примеры и рисунки). Теперь Пете нужно разместить на том же игровом поле здание биржи. Здание биржи представляет собой прямоугольник размером E на F клеток (E –– по горизонтали, F –– по вертикали). Естественно, что здание биржи должно полностью располагаться на игровом поле и не должно иметь общих клеток с супермаркетом (но может касаться его).

Сколькими способами Петя сможет разместить здание биржи?

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

Вводятся числа NMABCDEF, каждое в отдельной строке. Числа удовлетворяют следующим условиям: 1 ≤ N ≤ 100, 1 ≤ M ≤ 100, 1 ≤ A ≤ N, 1 ≤ B ≤ M, 1 ≤ A + C - 1 ≤ N, 1 ≤ B + D - 1 ≤ M, 1 ≤ E ≤ N, 1 ≤ F ≤ M.

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

Выведите количество способов разместить здание биржи.

 

Ввод Вывод
6
5
2
3
3
2
1
2
15
4
4
2
2
3
2
2
2
0
6
5
1
1
3
3
3
3
3

Примечание

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



 

Оптом – дешевле!

Жадный алгоритм Задачи на моделирование

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

Кроме того, оператор предлагает покупать оптовые пакеты трафика – есть два предложения: купить пакет трафика на A мегабайт за B рублей и купить пакет трафика на C мегабайт за D рублей.

Таня планирует использовать в течение месяца N мегабайт интернет-трафика. Определите минимальную сумму, которую придётся ей заплатить. Таня может приобретать
любое количество каждых из двух предлагаемых пакетов, а также оплачивать трафик по тарифу «1 рубль за мегабайт». Таня может приобретать пакеты интернет-трафика и в том
случае, если суммарный оплаченный трафик будет более N мегабайт, если это выйдет дешевле.

Программа получает на вход пять натуральных чисел N, A, B, C, D, записанных в отдельных строках, не превосходящих 500 000 каждое. Гарантируется, что A > B и C > D.
Программа должна вывести одно целое число – минимальную сумму, которую нужно заплатить для приобретения N мегабайт трафика.
 

Ввод Вывод Примечание
35
10
9
20
17
31 Пакет на 10 мегабайт стоит 9 рублей, пакет на 20 мегабайт
стоит 17 рублей. Для оплаты 35 мегабайт нужно купить пакет
на 10 мегабайт и пакет на 20 мегабайт, а за оставшиеся 5
мегабайт заплатить 5 рублей.
 
55
30
20
20
16
40 Пакет на 30 мегабайт стоит 20 рублей, пакет на 20 мегабайт
стоит 16 рублей. Для оплаты 55 мегабайт нужно купить два
пакета на 30 мегабайт, что суммарно будет стоить 40 рублей.

 

Дом у озера

Задачи на моделирование реализация

Есть озеро, рядом с которым хотят построить дом. Архитектурный проект (форма дома) уже утверждён, можно только выбрать расположение дома так, чтобы он оказался рядом с озером. Желательно выбрать расположение дома рядом с озером так, чтобы у как можно большего числа жителей дома окна выходили на озеро, то есть чтобы длина общей границы дома и озера была максимальной.

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

Следующие N строк содержат по M символов – план дома. Символ «.» в этих строках обозначает пустую клетку, символ «H» обозначает» обозначает клетку дома. План дома является связной областью и не содержит «дырок» внутри. В плане есть хотя бы одна клетка, принадлежащая дому. Следующие N строк по M символов в каждой содержат план озера, в этих строках символ «.» обозначает пустую клетку, символ «W» обозначает клетку, занятую озером. План» обозначает клетку, занятую озером. План озера является связной областью и не содержит «дырок» внутри. В плане есть хотя бы одна клетка, принадлежащая озеру.

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

Ввод Вывод Примечание
5
6
......
.HHHH.
.HHHH.
.HHHH.
......
..WWW.
..WWW.
..WWW.
..WWW.
..WWW.
3       . . . . W W W
H H H H W W W
H H H H W W W
H H H H W W W
      . . . . W W W
5
7
...HHH.
.H...H.
.H.HHH.
.H.H...
.HHH...
.......
..WWWWW
WWW...W
W.W...W
..W....
11

Сдача

Вложенные циклы Комбинаторика Задачи на моделирование

Определите количество различных способов выплаты сдачи в размере n рублей купюрами 10 рублей и монетами 5, 2 и 1 рубль.

Например, 5 рублей можно выплатить четырьмя различными способами: 5 = 2 + 2 + 1 = 2 + 1 + 1 + 1 = 1 + 1 + 1 + 1 + 1.

Входные данные 
На вход программе подается натуральное число n <= 100 — размер сдачи, которую необходимо выплатить.
 
Выходные данные 
Выведите искомое количество способов выплаты.

 
Примеры
Входные данные Выходные данные
1 2 2
2 5 4

Короткая последовательность

Строки Задачи на моделирование

Дано целое число N. Рассмотрим последовательность S1S2S3...Sk..., где каждая группа цифр Sk состоит из записанных одно за другим чисел от 1 до k. Например, первые 75 цифр последовательности выглядят так:

112123123412345123456123456712345678123456789123456789101234567891011123456.

Требуется написать программу, которая определит: какая цифра находится на N-ой позиции в построенной последовательности.

Входные данные
Ввод содержит одно число N (0 < N < 32768).

Выходные данные
Выведите цифру, которая стоит на N-ой позиции в последовательности.
 

Ввод Вывод
3 2
20 5

Splash Bomb

Динамическое программирование Перебор Задачи на моделирование

Имеется клетчатое поле размером NxM. В каждой клетке может лежать либо реактив A, либо B, либо ничего не лежать - 0. За ход можно положить в некоторую клетку реактив A, причем преобразование вещества идет по следующему правилу: 0+A->A, A+A->B, B+A->0. При этом в результате последней реакции происходит взрыв, а в соседние непустые клетки по сторонам света (если они есть), попадает по порции реактива A. Очки за ход = количество взрывов минус 1. Очки за отдельные ходы суммируются. Требуется очистить поле и при этом набрать максимальное количество очков.
 
Входные данные
В первой строке вводятся N и M (1 <= N, M <= 3). Далее идут N строк по M символов из алфавита (0, A, B) - описание поля.
 
Выходные данные
Выведите единственное число - максимальное количество очков, которое можно набрать.
 
Комментарий ко второму примеру: за первый ход не произошло ни одного взрыва, очки=0-1=-1; за второй ход произошел один взрыв и поле очистилось, очки=1-1=0; итого очков: 0+(-1)=-1

Ввод Вывод
1 1
0
0
1 1
A
-1

вес Деда Мороза

Отрезки Задачи на моделирование

Дед Мороз очень любит раздавать «подарочки» и если он долго их не раздаёт, то начинает грустить и поедать печеньки (не факт, что печеньки не олени). И он начинает толстеть, но когда он дарит хотя бы один подарочек, то возвращается к начальному весу (Т-Т ©Маша). На какой максимальный вес потолстеет Дед Мороз, если на одном отрезке он дарит по 1 подарку на каждый целый индекс, а всего он обойдёт m домов. Даны n отрезков пути для Деда Мороза на его траектории раздачи подарочков и сами отрезки. Также дано количество домов, которое он обойдёт.
Изначальный вес Деда Мороза 227 ± 1 кг.

Ввод Вывод
3 12
2 6
3 9
3 4
3
(с) Манаев В., Кашукова М., 2018 г.

Танец

Вывод формулы Задачи на моделирование

Для исполнения большого танца в круг выстроилось N танцоров (N чётное). Пронумеруем танцоров числами от 1 до N начиная от подиума по часовой стрелке. На каждом шаге танца танцоры разбиваются на пары (пару образуют два соседних по кругу танцора), и танцоры в паре меняются местам, причём на первом и всех последующих нечётных шагах танцор, стоящий в начале круга, образует пару с танцором, стоящим рядом с ним по часовой стрелке. Также пару образуют два танцора, следующие за ними по часовой стрелке, и т. д. На втором шаге и всех шагах с чётными номерами танцор, стоящий в начале
круга, образует пару с танцором, стоящим рядом с ним против часовой стрелки. Два танцора, следующие за ними против часовой стрелки, также образуют пару и т. д. 
 
На рисунке изображена начальная расстановка для N = 6 танцоров и два следующих шага танца. Расположение подиума отмечено точкой.
Определите, кто будет стоять рядом с танцором номер P через K шагов.

Программа получает на вход три целых числа N, P, K, записанные в отдельных строках. Первое число N – количество танцоров в кругу, N чётное. Второе число P – номер танцора, 1 ≤ P ≤ N. Третье число K – количество сделанных шагов после начала танца, 1 ≤ K. Максимальные значения для N и K <= 109
 
Программа должна вывести два целых числа в порядке возрастания – номера танцоров, которые будут стоять рядом с танцором номер P после K шагов танца.


 
Ввод Вывод Примечание
6
5
2
2 4 Рисунок выше соответствует этому примеру.

Преобразование дроби

Задачи на моделирование Вывод формулы

Дана правильная рациональная несократимая дробь a / b. С этой дробью выполняется следующая операция: к числителю и знаменателю дроби прибавляется 1, после чего дробь сокращается. Определите, можно ли при помощи таких операций из дроби a / b получить другую правильную дробь c / d.

Программа получает на вход четыре целых числа a, b, c, d, причём 0 < a < b ≤ 105, 0 < с < d ≤ 105, числа a и b взаимно простые, числа с и d взаимно простые, a / b ≠ c / d.
Программа должна вывести одно натуральное число – сколько описанных операций нужно применить, чтобы из дроби a / b получить дробь с / d. Если это сделать невозможно, программа должна вывести число 0.

Ввод Вывод Примечание
1
3
2
3
 
2
Дана дробь 1 / 3. После первой операции получается дробь
2 / 4, которая сокращается до 1 / 2. После второй операции
получается дробь 2 / 3.
2
3
1
3
0
Получить из дроби 2 / 3 дробь 1 / 3 невозможно.
 
 

Лифт в бизнес-центре

Жадный алгоритм Задачи на моделирование реализация

Рабочий день закончился, и сотрудники бизнес-центра собрались по домам. Бизнесцентр представляет собой N-этажное здание, этажи пронумерованы от 1 до N снизу вверх. Все сотрудники хотят спуститься на парковку, которая расположена в подвальном помещении на один этаж ниже первого. Бизнес-центр оборудован лифтом, который может перевозить не более K человек одновременно. Лифт перемещается вверх или вниз на один этаж за одну секунду, посадка и высадка пассажиров происходят мгновенно. Изначально лифт расположен на уровне парковки. Известно, сколько людей хотят спуститься на парковку с каждого
из N этажей. Определите, какое минимальное время потребуется, чтобы перевезти на парковку всех сотрудников бизнес-центра.
 
Первая строка входных данных содержит наибольшее возможное число людей в лифте K, 1 ≤ K ≤ 109
Вторая строка содержит число этажей в бизнес-центре N, 1 ≤ N ≤ 105
 
Следующие N строк содержат целые неотрицательные числа – число людей, ожидающих лифт на 1, 2, … , N-м этаже соответственно, эти числа не превосходят 109  каждое. В здании находится хотя бы один человек. 

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

Ввод Вывод Примечание
2
3
3
0
1
8 Лифт перевозит 2 человек, в здании 3 этажа. Лифт поднимается на первый этаж за 1 с, забирает 2 человек и за 1 с спускается на парковку, затем лифт поднимается на первый этаж, забирает 1 человека, вместе с ним поднимается на третий этаж, забирает 1 человека и спускается на парковку. Подъём на третий этаж занимает 3 с, спуск – ещё 3 с.

Кинотеатр

Задачи на моделирование Вывод формулы

В первом ряду кинотеатра N + 2 мест, крайние места заняты персоналом кинотеатра, но N мест посередине свободно. K школьников входят в зрительный зал по очереди, и, конечно же, каждый школьник достаёт спиннер и начинает его крутить до начала сеанса.  Поэтому каждый школьник выбирает себе место как можно дальше от уже занятых мест. А именно, школьник находит самый большой свободный участок в ряду (любой, если таких несколько) и садится  посередине него. Если число свободных мест на этом участке было нечётно, то школьник садится точно посередине участка, тогда слева и справа от него остаётся поровну свободных мест. Если же это число чётно, то школьник выбирает одно из  двух свободных мест посередине, тогда с одной стороны от школьника будет на одно свободное место больше, чем с другой стороны.

По данным числам N и K определите, сколько мест осталось свободными с двух сторон от школьника, который занял место последним (K-м по счёту). 
 
Программа получает на вход два целых числа N и K, 1 ≤ K ≤ N ≤ 1018, и должна вывести два целых числа в порядке неубывания – количество свободных мест с двух сторон от школьника, который последним занял место в ряду.

 
Ввод Вывод Примечание
10
1
4
5
В зале 10 свободных мест, первый школьник сел посередине, с одной стороны от него 4 места, с другой стороны – 5.
 
10
2
2
2
Второй вошедший в зал школьник садится посередине группы из 5 свободных мест, с каждой стороны от него остаётся по 2 свободных места.
10
3
1
2
После того, как два школьника сели на места, в зале остались группы свободных мест из 4, 2, 2 мест. Третий школьник садится посередине группы из 4 мест, поэтому с одной стороны от него 1 место, с другой стороны – 2 места.

Постоянная Капрекара

Строки Задачи на моделирование

Возьмем четырехзначное число, в котором не все цифры одинаковы, например, 6264. Расположим цифры сначала в порядке убывания - 6642; затем, переставив их в обратном порядке, получим 2466. Вычтем последнее число из 6642. На следующем шаге с полученной разностью проделаем тоже самое. Через несколько таких действий получится число, переходящее само в себя и называемое постоянной Капрекара. Если разность получается трехзначная, надо в начале добавить ноль.

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


Входные данные: вводится одна строка, в которой записано четырехзначное число.

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

Лифт

Задачи на моделирование Одномерные массивы

Лифт

В доме Вилли установили скоростной лифт новой экспериментальной модели. В этом лифте кнопки с номерами этажей заменены двумя другими кнопками. При нажатии на первую кнопку лифт поднимается на один этаж вверх, а при нажатии на вторую – опускается на один этаж вниз.
 
Младшему брату Вилли Дилли очень нравится кататься на новом лифте. Он катается на нём до тех пор, пока не побывает на каждом из этажей хотя бы по одному разу. После этого Дилли довольный возвращается домой.
 
Зная порядок, в котором Дилли нажимал на кнопки лифта, попробуйте определить общее количество этажей в доме Вилли и Дилли.
 
Входные данные
Первая строка входного файла INPUT.TXT содержит последовательность нажатий на кнопки лифта. Символ «1» означает, что была нажата первая кнопка, а символ «2» – что была нажата вторая кнопка. Символы «1» и «2» не разделены пробелами. Количество нажатий от 1 до 100. Гарантируется, что лифт никогда не опускался ниже первого и не поднимался выше последнего этажа.
 
Выходные данные
Следует вывести одно число – количество этажей в доме Вилли и Дилли.

Ввод Вывод
11 3
21212 2
1221221221221 6

Малыш и Карлсон

Бинарный поиск по ответу Задачи на моделирование

Малыш может съесть банку варенья за А1 минут, корзину печенья за B1 минут, выпить бутылку молока за C1 минут. А Карлсон может сделать это за A2, B2, C2 минут соответственно. Напишите программу, вычисляющую, за какое минимальное время они смогут покончить с завтраком, состоящим из банки варенья, корзины печенья и бутылки молока?
 
В первой строке входного файла содержится три целых числа, разделенных пробелами – значения параметров A1, B1, C1. Во второй строке входного файла содержится три целых числа, разделенных пробелами – значения параметров A2, B2, C2. Все числа в диапазоне от 1 до 106.
В выходной файл вывести одно число – минимальное время завтрака с точностью 10−5.
 
Ввод Вывод
13 10 14
6 6 7
12.00000

(с) Южно-Уральский открытый командный чемпионат, 2006

Вычислитель

Задачи на моделирование Задача на реализацию

Дана блок-схема алгоритма. Какое целое положительное число w необходимо подать на вход, чтобы после завершения алгоритма получилось значение s ? В ответе укажите целое число. Примечание. Операция mod вычисляет остаток от деления первого аргумента на второй. Операция div вычисляет частное от целочисленного деления первого аргумента на второй.

Тяжелая, вариант-2

Задача на реализацию Задачи на моделирование

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

Машины в Берляндии представляют собой отрезки длинной l. Автостоянка представляет отрезок на прямой [0;M]. В точке 0 и точке M находятся стены. В некоторых точках Xi этого отрезка могут стоять машины, то есть левая граница отрезка, образующего машину, находится в точке Xi. Уже стоящие на стоянке машины не пересекаются, но могут стоят вплотную друг к другу или к стене.

Требуется поставить на стоянку еще одну машину, которая приехала из другой страны. Причем машина не должна выходить за границы стоянки и пересекаться с другими машинами. Гриша хочет выяснить, какую наибольшую длину может иметь приехавшая машина, чтобы ее можно было поставить между любыми двумя смежными машинами, либо между стеной и машиной. Причем машину поставить на стоянку не так просто, поэтому слева и справа расстояние от границ приехавшей машины до ближайшего препятствия (другой машины или стены) должно быть не меньше некоторого b.

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

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

В первой строке записаны четыре целых неотрицательных числа n, M, l и b (0 ≤ n ≤ 100, 1 ≤ M ≤ 100000, 1 ≤ l ≤ 100000, 0 ≤ b ≤ 100000) — количество автомобилей на стоянке, длина стоянки, длина автомобиля в Берляндии и необходимое расстояние от границ приехавшего автомобиля до ближайшего препятствия.

В следующей строке находятся n неотрицательных чисел Xi (Xi < M) — точки, в которых располагаются левые границы машин.

Гарантируется, что машины не пересекаются между собой, а также со стенами, но возможно соприкасаются.

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

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

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

Пример входных и выходных данных

Ввод Вывод Примечание
4 21 1 1
7 12 3 16
1  
4 30 3 1
24 5 11 18
1  
2 20 3 1
7 10
0 В данном примере машины стоят вплотную, и между ними нельзя поставить никакую машину.

 

Тяжелая, вариант-1

Задачи на моделирование Использование сортировки реализация

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

Машины в Берляндии представляют собой отрезки длинной l. Автостоянка представляет отрезок на прямой [0;M]. В точке 0 и точке M находятся стены. В некоторых точках Xi этого отрезка могут стоять машины, то есть левая граница отрезка, образующего машину, находится в точке Xi. Уже стоящие на стоянке машины не пересекаются, но могут стоят вплотную друг к другу или к стене.

Требуется поставить на стоянку еще одну машину, которая приехала из другой страны. Причем машина не должна выходить за границы стоянки и пересекаться с другими машинами. Гриша хочет выяснить, какую наибольшую длину может иметь приехавшая машина, чтобы ее можно было поставить в некоторую точку, принадлежащую стоянке. Причем машину поставить на стоянку не так просто, поэтому слева и справа расстояние от границ приехавшей машины до ближайшего препятствия (другой машины или стены) должно быть не меньше некоторого b.

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

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

В первой строке записаны четыре целых неотрицательных числа n, M, l и b (0 ≤ n ≤ 100, 1 ≤ M ≤ 100000, 1 ≤ l ≤ 100000, 0 ≤ b ≤ 100000) — количество автомобилей на стоянке, длина стоянки, длина автомобиля в Берляндии и необходимое расстояние от границ приехавшего автомобиля до ближайшего препятствия.

В следующей строке находятся n неотрицательных чисел Xi (Xi < M) — точки, в которых располагаются левые границы машин.

Гарантируется, что машины не пересекаются между собой, а также со стенами, но возможно соприкасаются.

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

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

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

Пример входных и выходных данных

Ввод Вывод
4 21 1 1
7 12 3 16
2
4 30 3 1
24 5 11 18
3
2 20 3 1
7 10
5

Легкая, вариант-2

Дата и время Задачи на моделирование

Сервер одной крупной аналитической компании делает резервное копирование всех данных каждые пол часа. Системный администратор Илья Филиппович Яковлев заступит сегодня на смену в известное время. Он знает, что сервер делает резервное копирование в полночь (00:00:00), но не может посчитать, когда же будет следующее резервное копирование после момента его заступления на смену. 
 
Ваша задача — написать программу, которая определит время следующего резервного копирования после начала смены Ильи Филипповича. Считается, что резервное копирование происходит мгновенно. Таким образом, если Илья Филиппович заступает в момент резервного копирования, считается, что оно происходит уже в его смену. 
 
Формат входного файла
 
На вход программе подается строка, в которой находится время заступления Ильи Филипповича в формате hh:mm:ss, где hh обозначает часы в 24-часовом формате, mm — минуты, а ss — секунды. Гарантируется, что время корректно. 
 
Формат выходного файла
 
Требуется вывести время следующего резервного копирования в аналогичном формате. 
 
Пример входных и выходных данных
 
Ввод Вывод
12:55:00 13:00:00
00:00:00 00:00:00
18:30:03 19:00:00

Легкая, вариант-1

Дата и время Задачи на моделирование

Сервер одной крупной аналитической компании делает резервное копирование всех данных каждые пол часа. Системный администратор Илья Филиппович Яковлев заступит сегодня на смену в известное время. Он знает, что сервер делает резервное копирование в полночь (00:00:00), но не может посчитать, когда же было последнее резервное копирование на момент его заступления на смену.

Ваша задача — написать программу, которая определит время последнего резервного копирования перед началом смены Ильи Филипповича. Считается, что резервное копирование происходит мгновенно. Таким образом, если Илья Филиппович заступает в момент резервного копирования, считается, что оно происходит уже в его смену
 
Формат входного файла
 
На вход программы подается строка, в которой находится время заступления Ильи Филипповича в формате hh:mm:ss, где hh обозначает часы в 24-часовом формате, mm — минуты, а ss — секунды. Гарантируется, что время корректно. 
 
Формат выходного файла
Требуется вывести время последнего резервного копирования в аналогичном формате. 
 
Пример входных и выходных данных
 
Ввод Вывод
12:55:00 12:30:00
00:00:00 23:30:00
18:30:03 18:30:00

Формальное исполнение алгоритма, заданного на естественном языке или для конкретного исполнителя с заданным набором команд

Задача на реализацию Задачи на моделирование

Цепочки цифр (строки) создаются по следующему правилу:
Первая строка состоит из двух цифр «1».
Каждая из последующих цепочек создается такими действиями: берется цифра, на единицу большая максимальной цифры, использовавшейся в предыдущей строке.
Эта цифра вставляется в начало, в конец и между всеми цифрами предыдущей строки.

Вот первые 4 строки, созданные по этому правилу:
(1) 11
(2) 21212
(3) 32313231323
(4) 43424341434243414342434

Таким образом, было построено еще 5 строк и в результате получена строка, содержащая цифры от 1 до 9 и состоящая из 767 цифр.

Напишите через пробел сначала цифру, стоящую на a позиции от начала, а затем на b позиции от начала. a и b считываются с клавиатуры (записаны в одной строке через пробел, номер позиции от начала отсчитывается с 1).

Алгоритмизация и программирование

Задачи на моделирование Строки Задача на реализацию

Дана исходная последовательность цифр: 1234
Задан алгоритм преобразования последовательности, на каждом шаге которого выполняются следующие операции:
1. В конец последовательности, имеющейся перед выполнением шага, дописывается ее копия, но развернутая зеркально (цифры записываются в обратном порядке).
2. В конце получившейся последовательности удаляется количество цифр, равное номеру шага выполнения алгоритма.

Ниже приведены результаты выполнения первых двух шагов алгоритма:
1: 1234432
2: 123443223443

Определите, какие цифры будут на A-ой, B-ой и C-той позиции от начала последовательности, которая получилась после выполнения 8-ого шага алгоритма. В ответе укажите через пробел три цифры: сначала цифру, которая стоит на А-ой позиции, затем цифру, которая стоит на В-ой позиции и затем цифру, которая стоит на С-той позиции.  A, B и C задаются с клавиатуры.
 

Алгоритм

Простые числа и разложение на множители Задачи на моделирование

Реализуйте алгоритм, представленный блок-схемой, на одном из языков программирования.
 
В первой строке ввода содержится одно целое число N (2 ≤ N ≤ 109).
Каждое число, которое выводится в алгоритме, вывести на отдельной строке.



Ввод Вывод
12 2
2
3

Алгоритм

Задачи на моделирование Цикл for

Реализуйте на одном из языков программирования алгоритм, представленный на схеме.
В первой строке ввода содержатся два целых числа A и B (1 ≤ A ≤ B ≤ 109).
Вывести одно целое число – значение K после завершения работы алгоритма.



Ввод Вывод
10 100 2

Дело в шляпах

Задачи на моделирование Очередь Разбор случаев

Как-то раз в город Шляп заехал известный парикмахер. До его приезда парикмахеры были явно не очень, так как все жители города предпочитали ходить в шляпах. Но наконец-то настало время снять шляпы! 

Парикмахер открыл свою временную парикмахерскую и работает без остановок, пока есть посетители. Жители приходят к нему в тот момент времени, когда им это удобно, и становятся в очередь. Каждому из них требуется своё время на создание индивидуальной стрижки. Парикмахер зовёт первого человека в порядке очереди, стрижёт его, и после ухода посетителя сразу зовёт следующего.
Стоять в очереди скучно, поэтому если подряд приходят двое или более людей в шляпах одинакового фасона  они начинают между собой активно общаться и необычайно гордиться своими шляпами (но всё равно заходят на стрижку, если уж их очередь подошла). Однако, если следом за ними в очередь встаёт человек в шляпе другого фасона, то вся группа подряд стоящих людей в одинаковых шляпах подозрительно смотрит на только что пришедшего "чужого" и совсем уходит из очереди. При этом очередь сдвигается и может появиться новая группа общающихся людей.
 
Так как обсуждение одинаковых шляп  это очень интересная тема, появление "чужого" человека в очереди привлекает внимание группы сильнее, чем парикмахер. Поэтому если одновременно пришёл человек в другой шляпе и парикмахер зовёт следующего  вся группа уходит, даже если один из них должен был сейчас зайти на стрижку. К парикмахеру при этом зайдёт следующий из оставшейся очереди, возможно даже только что пришедший "чужой".
Местного шляпника теперь интересует, каким жителям ему больше не нужно будет делать шляпы, так как они будут ходить с новыми стильными стрижками?
 
Формат входных данных
В первой строке содержится число N (1 <= N <= 105)  количество людей, которые придут к парикмахеру.
Каждая из следующих N строк обозначает пришедшего к парикмахеру жителя и содержит по три числа: фасон шляпы (все фасоны местного шляпника пронумерованы от 1 до 10), момент времени прихода s (1 <= s <= 109), и время на стрижку t (1 <= t <= 109). Строки упорядочены по времени прихода жителей. Гарантируется, что все приходят в разное время. Так как парикмахер очень крут, гарантируется, что он успеет постричь всех жителей до момента времени 2 · 109, даже если бы из очереди никто не уходил.
 
Формат выходных данных
В единственной строке выведите через пробел номера людей в очереди в порядке возрастания, которых парикмахер всё-таки пострижёт. Люди нумеруются в порядке прихода в очередь, начиная с 1.

Ввод Вывод
5
1 2 7
2 4 3
2 6 2
1 7 3
3 8 2
1 4 5

Очень Важный Объект

геометрия Задачи на моделирование реализация

Антон  сторож на очень важном объекте. Как и положено всем важным объектам, он обнесён забором. Правда, время не пощадило этот забор, и в нём есть дыры, через которые на объект могут попадать нарушители.
Известно, что изначально забор состоял из n столбов и n соединяющих их секций. Забор ограничивал территорию, являющуюся выпуклым многоугольником. Однако, со временем, некоторые секции забора развалились и теперь через эти дыры можно почти беспрепятственно пройти внутрь:  Антону сложно следить за всеми дырами в заборе. Известно, что в заборе нет двух отсутствующих секций подряд.

Поняв, что, если на объект будет попадать слишком много нарушителей, Антон решил взять инициативу в свои руки и заделать некоторые дыры. Для этого он попросил у начальства моток колючей проволоки. Полученный им моток из l метров колючей проволоки нужно будет потом вернуть в целости, поэтому Антону запрещено его резать. Антон может закрепить один из концов мотка с проволокой в любом месте на границе объекта.
 
После чего, он может пойти вдоль границы по или против часовой стрелки, разматывая моток, и закрепить второй конец там, где он остановился. Он хочет выбрать место, с которого ему нужно начинать так, чтобы оставшиеся в заборе дыры имели минимально возможную длину. Помогите ему определить эту длину.
 
Формат входных данных
В первой строке входного файла содержится три целых числа n (3 <= n <= 105)  количество столбов в заборе, l (0 <= l  <= 1018)  длина выданного Антону мотка проволоки и k (0 <= k   <=n/2) количество дыр в заборе.
Во второй строке по возрастанию заданы k чисел ai (1 < ai <= n). Числу ai соответствует отсутствие секции забора между столбами ai и ai+1 mod n. Гарантируется, что из двух соседних секций хотя бы одна не отсутствует.
В следующих n строках находится по два целых числа xi и yi (|xi| <= 1018, |yi| <= 1018)  координаты i-го столба забора. Многоугольник может быть задан в порядке обхода как по, так и против часовой стрелки.

Формат выходных данных
Выведите единственное число  минимальную суммарную длину дыр в заборе после установки колючей проволоки. Ответ будет считаться правильным, если если он отличается от правильного не более, чем на p · 10?6
, где p  периметр многоугольника.

Примеры
Ввод Вывод
6 4 3
1 3 5
0 0
3 0
4 1
3 2
0 2
-1 1
2.82842712474619

Легкая, вариант-1

Алгоритмы обработки Задачи на моделирование

Вы занимаетесь разработкой системы по продаже билетов на поезда. Несмотря на то, что поезда ходят по множеству различных маршрутов, вы будете работать только с одним из них. Маршрут рассматриваемого поезда состоит из n остановок: маршрут начинается в первой из них, а заканчивается в n-й, соответственно. Всего в поезде имеется m мест для пассажиров.

Эта система будет использоваться для продажи билетов пассажирам. При покупке билета пассажир указывает номер станции L, на которой он хочет сесть на поезд и номер станции R, на которой он хочет сойти с поезда. Если у одного пассажира есть билет до станции S, а другой хочет купить билет от станции S, то они друг другу не мешают: второй может занимать только что освободившееся место первого. Система должна сообщить пассажиру следующую информацию:

  • «YES», если в поезде есть свободные места. В этом случае пассажир покупает один билет с L-й по R-ю станцию.
  • «NO», если подходящих свободных мест нет. В этом случае пассажир билет не покупает.

 

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

В первой строке находятся натуральные числа n (2 ≤ n ≤ 100), m (1 ≤ m ≤ 100) и k (1 ≤ k ≤ 100) — число станций в маршруте поезда, максимальное число пассажиров в поезде и число обращений обращений пассажиров к системе покупки билетов.

Следующие k строк содержат по два натуральных числа Li и Ri (1 ≤ Li < Ri ≤ n)  — начальная и конечная станции в i-м обращении к системе.

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

Для каждого обращения к системе в своей строке выведите её ответ: YES или NO.

Пример входных и выходных данных

Ввод Вывод
5 2 4
1 4
1 3
2 5
3 5
YES
YES
NO
YES

 

Тяжелая, вариант-2

Задачи на моделирование Задача на реализацию

Мальчик Филя прочитал в одном научном журнале, что не так давно астрономы открыли новую планету, на которой как и на Земле существует жизнь. Ученые уже установили связь с ее жителями и успели выяснить, что эта планета обращается вокруг своей оси за другое время, поэтому сутки здесь длятся не 24 часа. На ней, так же как и на Земле, время измеряется часами, минутами и секундами. Но количество минут в часе, и секунд в минуте не совпадает с привычными земными.

А именно: в одном часе A минут, в одной минуте B секунд. Также, в одних сутках на этой планете X часов, Y минут Z секунд. То есть когда часы должны показать момент времени X:Y:Z, они показывают 0:0:0, и с этого момента начинается отсчет новых суток

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

Филя увлекается нумерологией, поэтому его интересует вопрос: сколько хороших моментов времени на часах этой планеты будет показано с момента времени H1:M1:S1 до момента времени H2:M2:S2 включительно. Филя называет момент времени хорошим, если в нем не содержится цифры c, то есть ни один из дисплеев не содержит (с учетом вышеописанных правил) цифру c.

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

В первой строке находятся два натуральных числа A, B (1 ≤ A, B ≤ 50) — количество минут в часе и секунд в минуте.
В следующей строке находятся три целых числа X, Y, Z (0 ≤ X ≤ 50, 0 ≤ Y < A, 0 ≤ Z < B) — количество часов, минут и секунд в сутках. Гарантируется, что X, Y, Z одновременно не равны нулю.
В следующей строке находятся три целых числа H1, M1, S1— стартовое время. Гарантируется, что это время, которое часы могут отобразить в течении суток.
В следующей строке находятся три целых числа H2, M2, S2— конечное время время. Гарантируется, что это время, которое часы могут отобразить в течении суток.
Обратите внимание, что моменты времени могут находиться в разных сутках. Также обратите внимание, что моменты времени могут совпадать. В этом случае в интервале находится единственный момент времени.
В следующей строке находится цифра c (0 ≤ c < 10).

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

Требуется вывести одно число — количество хороших моментов времени с H1:M1:S1 до H2:M2:S2 включительно.

 

Пример входных и выходных данных

Ввод Вывод
3 2
5 0 0
0 0 0
1 0 0
7
4 2
3 1 1
1 0 0
0 0 0
6
50 50
24 0 0
3 0 0
18 15 0
26956

 

Тяжелая, вариант-1

Задачи на моделирование реализация

Мальчик Гриша прочитал в одном научном журнале, что не так давно астрономы открыли новую планету, на которой как и на Земле существует жизнь. Ученые уже установили связь с ее жителями и успели выяснить, что эта планета обращается вокруг своей оси за другое время, поэтому сутки здесь длятся не 24 часа. На ней, так же как и на Земле, время измеряется часами, минутами и секундами. Но количество минут в часе, и секунд в минуте не совпадает с привычными земными.

А именно: в одном часе A минут, в одной минуте B секунд. Также, в одних сутках на этой планете X часов, Y минут Z секунд. То есть когда часы должны показать момент времени X:Y:Z, они показывают 0:0:0, и с этого момента начинается отсчет новых суток

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

Гриша увлекается нумерологией, поэтому его интересует вопрос: сколько хороших моментов времени на часах этой планеты будет показано с момента времени H1:M1:S1 до момента времени H2:M2:S2 включительно. Гриша называет момент времени хорошим, если в нем содержится хотя бы одна цифра c, то хотя бы один из дисплеев содержит (с учетом вышеописанных правил) цифру c.

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

В первой строке находятся два натуральных числа A, B (1 ≤ A, B ≤ 50) — количество минут в часе и секунд в минуте.
В следующей строке находятся три целых числа X, Y, Z (0 ≤ X ≤ 50, 0 ≤ Y < A, 0 ≤ Z < B) — количество часов, минут и секунд в сутках. Гарантируется, что X, Y, Z одновременно не равны нулю.
В следующей строке находятся три целых числа H1, M1, S1— стартовое время. Гарантируется, что это время, которое часы могут отобразить в течении суток.
В следующей строке находятся три целых числа H2, M2, S2— конечное время время. Гарантируется, что это время, которое часы могут отобразить в течении суток.
Обратите внимание, что моменты времени могут находиться в разных сутках. Также обратите внимание, что моменты времени могут совпадать. В этом случае в интервале находится единственный момент времени.
В следующей строке находится цифра c (0 ≤ c < 10).

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

Требуется вывести одно число — количество хороших моментов времени с H1:M1:S1 до H2:M2:S2 включительно. 

 

Ввод Вывод
3 2
5 0 0
0 0 0
1 0 0
3
0
4 2
3 1 1
1 0 0
0 0 0
14
50 50
24 0 0
3 0 0
18 15 0
7
11295

Тяжелая, вариант-1

Жадный алгоритм Задачи на моделирование

В школьную столовую пришли n учеников разных классов и выпили суммарно k стаканов компота. Кассирша тетя Таня хорошо знает всех учеников, поэтому про i-го пришедшего школьника она знает число ai — минимальное количество стаканов компота, которое мог выпить этот школьник. Также она знает, i-й школьник выпьет явно не больше ai+x стаканов компота. Теперь ей стало интересно: а какое максимальное количество стаканов компота гарантированно выпил один из школьников? То есть она хочет найти такое максимальное число m, что при любом корректном распределении количества выпитых стаканов компота между школьниками, школьник, выпивший максимальное количество стаканов компота, выпил их не менее чем m штук. Помогите ей с этой задачей.

Формат входного файла

В первой строке входного файла input.txt находятся три натуральных числа n, k, x (1 ≤ n ≤ 100; 1 ≤ k ≤ 2 · 104; 1 ≤ x ≤ 100) — количество школьников, пришедших в столовую, количество стаканов компота, выпитого ими, и максимальное количество стаканов, которое каждый школьник мог выпить сверх своего минимального количества, соответственно.
В следующей строке находятся n целых чисел ai (1 ≤ ai ≤ 100), разделенных пробелами, — минимальное количество стаканов компота, которое выпил i-й школьник.
Гарантируется, что входные данные корректны.

Формат выходного файла

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

Пример входных и выходных данных

Ввод Вывод Комментарий
3 4 1
1 1 2
2 Так как всего было выпито 4 стакана компота, а школьники выпили хотя бы 1, 1 и 2 стакана соответственно, первый школьник выпил ровно 1 стакан, второй — ровно 1 стакан, третий — ровно 2 стакана. Следовательно, ответ равен 2.
3 6 1
1 1 2
2 Каждый из школьников мог выпить по 2 стакана компота. Значит, ответ 3 гарантировать нельзя. Следовательно, ответ равен 2.
3 7 1
1 1 2
3 Так как всего выпито 7 стаканов компота, хотя бы один школьник выпил 3 стакана. Ответ 4, очевидно, недостижим. Следовательно, ответ равен 3.
3 12 2
1 2 4
5 Первый школьник выпил хотя бы 1 стакан и не более 3, второй — хотя бы 2 и не более 4, третий — хотя бы 4 и не более 6. Невозможно выпить 12 стаканов компота, если третий школьник выпьет ≤ 4 стакана, следовательно, ответ равен 5.


Легкая, вариант-2

реализация Задачи на моделирование Очередь

На складе хранятся ящики разных цветов и размеров. Каждый цвет и каждый размер имеют свой порядковый номер в информационной системе.

Перед отправкой ящики упаковывают и сортируют. Упаковка и сортировка ящиков неэффективна и происходит следующим образом:

  • Ящик под номером i поступает на склад.
  • Ищется стопка, в которой хранятся ящики с размером, равным размеру i-го. Если такой стопки нет, формируется новая стопка.
  • Поступающий ящик помещается наверх найденной или сформированной стопки.
  • Если в какой-либо стопке оказывается два верхних ящика одного цвета, то они запаковываются и отправляются адресату.
Отправка продолжается до тех пор, пока не будут обработаны все поступающие на склад ящики.

 

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

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

В первой находятся три натуральных числа n, m, k (1 ≤ n, m, k ≤ 100) — количество ящиков, поступающих на склад, количество различных размеров и количество различных цветов соответственно.
В каждой из следующих n строк находятся по два натуральных числа xi и yi (1 ≤ xi ≤ m; 1 ≤ yi ≤ k)  — номер размера и номер цвета ящика, который поступит i-м на склад.

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

Требуется вывести одно число — сколько ящиков будут отправлены.

Пример входных и выходных данных

 
Вывод Ввод
5 2 1
1 1
2 1
1 1
2 1
1 1
4
5 1 2
1 1
1 2
1 1
1 2
1 1
0

Самая упоротая задача

Задача на реализацию Задачи на моделирование

Сначала Антону Витальевичу показалось, что объявить приз на самую упоротую задачу – очень хорошая идея. Но когда его просто завалили этими задачами, он понял, что не успеет проверить их все к Новому Году. Поэтому он, пообещав хорошую оценку в журнал, дал Вам задание написать проверяющую эти задачи программу. (Ваш вопрос «А почему вы не можете сделать этого сами?» остался без ответа).

Задача – это набор текста, содержащего русские слова, заглавные латинские символы и числа, разделённые знаками препинания, специальными символами и пробелами. Упоротость задачи можно выразить целым неотрицательным числом, зависящим от многих факторов. Во-первых, чем длиннее задача, тем она упоротее, поэтому за каждое русское словоупоротость увеличивается на 1. Но если задача слишком длинная, то она из упоротой превращается в скучную. Поэтому, если количество слов превышает 50, то за каждое лишнее слово упоротость уменьшается на 2. Во-вторых, чем больше исходных данных, то есть латинских символов, тем задача упоротее, так что за каждый латинский символ упоротость умножается на 2. В-третьих, чем больше чисел нам дано сразу, тем задача скучнее, поэтому за каждое число упоротость делится на 10. Но если число отделено от латинского символа только пробелами, знаками препинания или специальными символами, то оно считается ограничением и вместо деления на 10 просто увеличивает упоротость на 30. В-четвёртых, знаки препинания – это всегда скучно, так что из-за них упоротость уменьшается на округлённый вверх двоичный логарифм их общего количества. Специальные символы и пробелы на упоротость никак не влияют. Если в результате получается нецелое число, оно округляется вниз.

Общая длина задачи не более 2*10^9 символов.
Русские слова - слова, состоящие из символов, не являющихся заглавными латинскими буквами, числами, знаками препинания и специальными символами.
Двоичным логарифмом нуля считать ноль.
К знакам препинания относятся , . ! ? ( ) : 
К специальным символам относятся & * = + - / ><
 
Дана задача. Вам необходимо подсчитать её общую упоротость.
 
Формат ввода
Дан текст с единственным символом переноса в конце.
 
Формат вывода
Вывести единственное число – общую упоротость задачи.

Пример
Ввод:
2 N 2 N 2 N 2 N 2
 
Вывод:
2400

(с) Даниил Кирионенко, 9и

Новогодние танцы

Задача на реализацию Задачи на моделирование

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

Е-елка
О-охрана
1-зона 1
2-зона 2
3-зона 3
4-зона 4
Х-олени
К-зайцы
С-снеговики
М-медведи
Л-лисицы
В-волки
П-подарки
Д-деды Морозы.

Вот план для размеров поля 9 на 9. Размер поля всегда нечетный и больше 8.

О М М М 2 С С С О
Л О М М 2 С С О К
Л Л О М 2 С О К К 
Л Л Л О О О К К К
3 3 3 О Е О 1 1 1
В В В О О О Х Х Х
В В О П 4 Д О Х Х
В О П П 4 Д Д О Х
О П П П 4 Д Д Д О

Человек, находящийся в зоне 1, одет в зайца, если стоимость его костюма кратна 3, в противном случае, он одет в оленя.
Человек, находящийся в зоне 2, одет в снеговика, если стоимость его костюма кратна 5, в противном случае, он одет в медведя.
Человек, находящийся в зоне 3, одет в лисицу, если стоимость его костюма кратна 5, в противном случае, он одет в волка.
Человек, находящийся в зоне 4, одет в подарок, если количество единиц его стоимости , записанной в двоичной системе счисления, больше количества нулей, в противном случае, он одет в Деда Мороза.
Про каждый костюм известно, за сколько его можно сшить.
Посчитайте и выведите стоимость костюма елки, затем охраны.
Затем надо вывести в порядке убывания стоимость и название костюма персонажа.

  • Входные данные:
    Вводится n-размер квадратной матрицы, затем сама матрица.
  • Выходные данные:
    Вывести сначала стоимость костюма елки, затем сумму всех костюмов охраны, затем в порядке убывания стоимость костюмов остальных персонажей и название костюма.
  • Входные данные:
    9
    0 1 1 0 2 5 5 4 1
    2 3 2 4 5 6 1 2 0
    1 2 3 4 2 3 1 2 3
    1 2 2 4 3 5 7 1 2
    0 2 3 1 2 3 4 5 6
    0 1 2 3 5 3 3 4 5
    5 6 2 7 4 2 2 4 2
    8 4 3 4 3 1 3 4 5
    6 7 8 2 5 2 1 3 3
  • 2
    58
    39 podarok
    32 olen
    27 snegovik
    27 volk
    21 zayka
    16 medved
    16 ded moroz
    10 lisiza

(с) Чуканова Юля, 10и

Желание для Герцога Циклонского

Алгоритмы обработки Задачи на моделирование

Герцог Циклонский, обладая безграничным могуществом, что отражено в его девизе "Все могу!", ежегодно проводит конкурс среди приглашенных на исполнение самого заветного желания.
Отбор проводится следующим образом: все претенденты рассаживаются на пронумерованных стульях (нумерация стульев начинается с 1) вокруг Большого Круглого стола, после чего посредством Константы счета начинается отсчет по часовой стрелке.
Претендент, на которого падает Константы счета, обязан освободить место, отсчет продолжается до тех пор, пока не останется два человека. 
Требуется при известном числе гостей N и Константы счета С определить номера стульев, которые нужно занять, чтобы попасть в число этих двух "счастливчиков".

Входные данные
В первой строке вводится число N (\(1<=N<=100\))  - количество приглашенных претендентов. Во второй строке вводится Константы счета (\(С<=100\)).

Выходные данные
Необходимо вывести через пробел два числа - номера стульев "счастливчиков".
 

Примеры
Входные данные Выходные данные
1 5
3
2 4

Интернет-магазин

Пересечение множеств Задачи на моделирование Задача на реализацию

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

Вам необходимо разработать сервис рекомендаций, который по истории предыдущих заказов разработает для покупателя рекомендации, основанные на текущем состоянии его заказа.
Рекомендации должны быть двух типов: "с этим товаром всегда берут следующие товары" и "с этим товаром часто берут следующие товары".  При этом "часто" понимается как 50% и более.
Например, если покупатель хочет купить два товара A и B, а предыдущие заказы были вида (A,
D), (B, C, E), (C, F), (C, E, F, G) и (A, B, C, E), то товары C и E надо рекомендовать как те, что
покупается всегда (вместе с товаром B), а D  как тот, что покупается часто (50% случаев заказов
с товаром A).

Если товар всегда покупался с одним из заказанных, то необходимо включить в число часто покупаемых и те, которые часто встречаются с этим товаром (не менее чем в 50% случаев) в ранее сделанных заказах. Таким образом, дополнительно к товарам покупаемым часто, добавится товар F, который часто покупается с товаром C. Товар G рекомендовать не нужно, т.к. он встречается меньше, чем в 50% заказов вместе с товаром C.

Не нужно рекомендовать товары, которые уже выбрал покупатель. Если товар можно рекомендовать как "часто" и "всегда", то следует рекомендовать его только как "всегда".

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

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

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

Ввод Вывод
5
A D
B C E
C F
C E F G
A B C E
A B
C E
D F

Ожидание трамвая

Задачи на моделирование

Ваня хочет поехать в школу,куда от его квартиры идёт только шестой трамвай. Проблема в том,что Ваня очень стеснительный и боится садиться 
в трамвай,если в нём больше d человек.Известно,что трамваи идут раз в k минут.Ваша задача состоит в том,чтобы посчитать количество минут,которые простоит Ваня на остановке, 
учитываю Ванину стеснительность:если есть такой пустой трамвай,который идёт Васе,он будет ждать его сколько угодно.Если же таких трамваев несколько,то он,разумеется,сядет на 
тот,что придёт раньше.Если данные введены некорректно,вывести "Absent"; 
Так же известно,что Ваня приходит на остановку в тот момент времени,когда к ней подъезжает первый трамвай
Входные данные: 
Сначала вводятся два числа d и k такие,что 0<=d<=100 и 0<=k<=100. 
Затем вводится t строк(0<=t<=100,само число t нам неизвестно),заканчивающихся одним числом -1 по 2 числа в каждой- количество людей в трамвае и его номер 
Вывод: 
В выводе должно быть одно число-количество минут,которые Ваня простоит на остановке в ожидании трамвая,или же слово "Absent"

(c) Васильев Алексей

Веселый Новый Год

реализация Задачи на моделирование

У нас было 2 набора юного химика, 75 мятных таблеток, 5 упаковок оберточной бумаги, полфунта детских драже и целое множество подарков всех сортов и расцветок, а также машинки, куклы,  мешок вкусного оленьего корма, пинта чистого сока и стадо быстрых оленей.
Не то что бы это был необходимый запас для поездки. Но если начал развозить подарки, становится трудно остановиться.
Единственное что вызывало у меня опасение - это олени. Нет ничего более непредсказуемого, чем стадо северных оленей, кто знает чего от них ожидать?  Я догадывался, что рано или поздно они дадут о себе знать.
Самое страшное, что домов, куда нужно доставить подарки, более 10^100000000 и ребенок сильно расстроится, узнав, что не получил подарка на Новый Год. Этого допускать нельзя, благо вы - не единственный Санта, и вам будет достаточно доставить подарки только в своем городе. Детишек в вашем городе не больше 10^4, но все они живут в разных домах. У вас есть список, в котором не больше 10^4 элементов, каждый элемент списка представляет собой 2 целых числа – координаты дома следующего ребеночка.  Доставив подарки в очередной дом, вы, как порядочный Санта, обязаны стирать координаты этого дома из своего списка. Но ваши олени не хотят спокойно доставлять подарки, они коллективно прокладывают на их взгляд более оптимальный и правильный маршрут, и выбирают номер следующего дома из вашего списка по своей очень логичной и тривиальной формуле:
Nnext  = |(K1  - K2  ) *R|% L,
где Nnext – номер следующего дома в вашем списке (Как делают настоящие ТРУ-программисты? Они считают элемент с  единицы нуля!)  K1  - количество еще не посещенных домов, K2 – количество уже посещенных домов, R – коэффициент рандомности стада и L – длина текущего списка. Заметим, что после посещения дома, количество элементов в вашем списке уменьшается, вы же порядочный Санта, верно? Вечером, после тяжелого трудового дня, вы, как и остальные труженики Новогоднего фронта,  выкладываете в свой блог количество  километров, которые сегодня преодолели. Изначально вы находитесь в доме с индексом 0 и считается, что подарок в этот дом уже доставлен.  Зная столь тривиальную, понятную и очевидную формулу расчета следующего дома, а также имея список домов и  хорошо зная свое стадо, вплоть до их коэффициента рандомности, скажите какое расстояние  вы пройдете за всю поездку? Ответ округлите вверх до целых, в таких вещах можно чуть-чуть  преувеличить.  
 
Входные данные:
В первой строке входного файла находятся целые положительные числа N, R (1<N<=10000,1< R <1000000) – количество детей в вашем списке и коэффициент рандомности вашего стада, соответственно.
В следующих N строках находятся по 2 целых числа X,Y (-100000<=X,Y<=100000) – координаты конкретного  дома.
Выходные  данные:
Выведете одно целое число – ответ на поставленную задачу.
 
Пример, как же без примера:
Входит:
4 2
1 1
0 0
2 0
2 1
Выходит:
6

(с) Ярослав Свиридов 10и

Новогодние фильмы

Вычисление по заданной формуле Задачи на моделирование

Вася задался целью на зимних каникулах пересмотреть все новогодние фильмы, которые он знает. Но у него возникла проблема - он не может смотреть больше чем 6 часов в день. Теперь он хочет понять, успеет он пересмотреть все фильмы за каникулы или нет. Помогите ему в этом.
 
Входные данные:
В первой строчке записано одно число n - количество фильмов. Далее идёт n фильмов в формате "НАЗВАНИЕ ДЛИНА"
Выходные данные:
Выведите одно число - количество дней, нужных для просмотра всех фильмов.

Пример ввода:
5
Тариф "Новогодний" 1:23
Ёлки 1:30
Ёлки 2 1:46
Ёлки 3 1:40
Чародеи 2:27

Пример вывода:
2

Пример
Ввод:
Все новогодние фильмы с древности и до наших дней 100:00
Вывод:
17

(с) Даниил Кирионенко  8и

The Cake is a Lie

интерактив реализация Задачи на моделирование

GLaDOS приготовила для Челл новое, последнее испытание! В его рамках ей предстоит найти торт. Но всё не так-то просто — у неё отобрали портальную пушку и завязали глаза. Единственное, что Челл известно, — что она находится в прямоугольной комнате, выложенной квадратной плиткой, и что где-то в этой комнате расположен торт. Всё что остаётся делать Челл, — слепо переходить с плитки на плитку в поисках торта.

Кроме того, так как действие происходит в Лаборатории Исследования Природы Порталов, на каждой стене комнаты расположен портал, связанный с противоположной стеной. Формально: рас- смотрим комнату как прямоугольную сетку размера W × H и введем систему координат так, чтобы левая нижняя ячейка сетки имела координаты (0, 0), а правая верхняя — (W − 1, H − 1). За один шаг Челл может перейти в одну из четырёх соседних ячеек, причём попытка пройти сквозь стену приводит к тому, что Челл появляется с противоположной стороны комнаты. Например, шаг вниз из ячейки (x, 0) приведёт в ячейку (x, H −1), а шаг влево из ячейки (0, y) приведёт в ячейку (W −1, y).

Чтобы сделать испытание сложнее, GLaDOS не сообщила Челл ни размеры комнаты, ни коорди- наты её изначального положения, ни координаты торта. Более того, так как у Челл завязаны глаза, а портальная технология достигла совершенства в своём развитии, Челл даже не может определить, прошла ли она очередным ходом через портал или нет.

Челл может найти торт, только оказавшись в одной клетке с ним. Помогите ей пройти последнее испытание! Формат взаимодействия с тестирующей системой Это интерактивная задача. Ваша программа будет общаться с тестирующей системой по протоколу, описанному ниже. Вам разрешается произвести не более 200 000 ходов. Чтобы переместиться в соседнюю ячейку, выведите строку, содержащую ровно один символ, задающий направление перемещения: «U» — вверх; «D» — вниз; «L» — влево; «R» — вправо. Затем вы должны считать строку, в которой будет находиться ровно один символ, обозначающий результат перемещения: • «Y» — после произведённого хода Челл оказалась в клетке с тортом; • «N» — после произведённого хода Челл оказалась в клетке, не содержащей торт; • «E» — служебный символ, обозначающий, что после произведённого хода Челл всё ещё не нашла торт, а ваша программа превысила ограничение на количество ходов. Обратите внимание, после считывания символа «Y» или «E» вы обязательно должны сразу завершить вашу программу. В противном случае, вердикт тестирующей системы может быть некор- ректным! Гарантируется, что в клетке, в которой исходно находится Челл, нет торта. В точности соблюдайте формат выходных данных. После вывода каждой строки сбрасы- вайте буфер вывода — для этого используйте команды flush(output) на языке Паскаль или Delphi, fflush(stdout) или cout.flush() в C/C++, sys.stdout.flush() на языке Python, System.out.flush() на языке Java.

Твоя игра

Задача на реализацию Задачи на моделирование

В интеллектуальном шоу «Твоя игра» принимают участие 3 человека. Им даются 5 тем, каждая из которых содержит по 5 вопросов стоимостью 100, 200, 300, 400 и 500 баллов. Если игрок правильно отвечает на вопрос, то к его текущей сумме прибавляется стоимость вопроса, если же он допускает ошибку, то от его суммы стоимость вопроса отнимается. При этом у игрока может оказаться отрицательная сумма баллов.

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

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

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

В следующих строках содержится информация о сыгранном вопросе. Сперва идёт имя участника, отвечавшего на вопрос, а через пробел — полученная им сумма баллов. Если количество баллов положительно, то ответ оказался правильным, если же отрицательно, то игрок ошибся. Гарантируется, что разыгранное количество вопросов каждой стоимости (100, 200, 300, 400 и 500) не превосходит 5. Также гарантируется, что во время игры будет разыгран хотя бы один вопрос.

В последней строке находится надпись «GAME OVER», означающая, что игра окончена и больше вопросов не будет.

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

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

Ввод:

Artur Dmitry Fedor
Artur -500
Dmitry 400
Fedor 100
Artur 400
Fedor 200
Fedor 100
Artur 500
GAME OVER

Вывод:
-500 0 0
-500 400 0
-500 400 100
-100 400 100
-100 400 300
-100 400 400
400 400 400

Преобразование последовательности

Задача на реализацию Задачи на моделирование

Учительница математики очень не любит Колю и всегда заставляет его отвечать у доски самые
сложные задачи.
Вот и сегодня она написала на доске последовательность из n целых неотрицательных чисел
чисел a1, a2, . . . , an и вызвала Колю к доске. За одно действие учительница разрешает Коле
стереть любое число и на его место записать число на единицу больше. Учительница требует от
Коли за минимальное число действий добиться того, чтобы где-нибудь в этой последовательности
встречались подряд в возрастающем порядке числа от 1 до h.
Помогите Коле понять, за какое минимальное число действий ему удастся добиться того, что для
некоторого i будет выполнено ai = 1, ai+1 = 2, . . . , ai+h−1 = h, или выясните, что это невозможно и
учительница опять безнаказанно издевается над бедным Колей.

Формат входных данных
Первая строка входного файла содержит два натуральных числа: n и h (1 ≤ h ≤ n ≤ 200 000).
Вторая строка содержит n чисел ai — исходные значения элементов выписанной последовательности
(0 ≤ ai ≤ n).
Формат выходных данных
В единственной строке выходного файла выведите минимальное количество действий, за которое
Коля сможет выполнить задание, или −1 в случае, если выполнить его невозможно.

Примеры
Ввод
4 3
1 1 0 2
Вывод
3

Ввод
3 2
1 3 2
Вывод
-1

В первом примере Коле надо дважды увеличить на 1 третье число и один раз — четвертое. Тогда
последовательность примет вид 1, 1, 2, 3, для i = 2 выполнено искомое условие.
Во втором примере получить в последовательности подряд 1 и 2 невозможно.

Игра

Разбор случаев Задачи на моделирование

На уроке физкультуры первоклассники Петя и Вася играют в увлекательную игру. Перед ребятами в ряд стоит n столбиков разной высоты. У мальчиков есть m колец, которые они по очереди кидают на столбики, причем если на столбике уже есть кольцо, то кидать кольцо на этот столбик нельзя. Петя кидает первым.
Ребята выяснили, что Петя может закинуть кольцо на столбик только, если высота этого столбика не меньше l1 и не больше r1. На слишком высокий или слишком низкий столбик он закинуть кольцо не может. Зато, если столбик имеет подходящую высоту, бросок гарантированно заканчивается успехом. Аналогично, Вася может закинуть кольцо только на столбики с высотой не меньше l2 и не больше r2 и гарантированно закидывает кольцо на любой такой столбик.
Физрук Андрей Сергеевич обещал поставить пятерку тому из ребят, кто по итогам игры закинет больше колец на столбики. Помогите ребятам выяснить, кто из них выиграет при оптимальной игре.

Формат входных данных
В первой строке входного файла находятся два целых числа n и m — количество столбиков и колец, соответственно (1 ≤ m ≤ n ≤ 105). Следующие две строки содержат числа l1, r1 и l2, r2 — минимальную и максимальную высоту столбиков, на которые могут кидать колечки Петя и Вася, соответственно (1 ≤ l1 ≤ r1 ≤ 109, 1 ≤ l2 ≤ r2 ≤ 109). В последней строке содержится n чисел, описывающих высоту столбиков, высота каждого столбика является целым положительным числом и не превышает 109.
Формат выходных данных
В выходной файл выведите «Petya», если выиграет Петя, «Vasya», если выиграет Вася, или «Draw», если при оптимальной игре оба мальчика закинут на столбики равное число колец.

Дюна

Задача на реализацию Задачи на моделирование

Географ Григорий Георгиевич исследует образование песчаных дюн. Он выбрал очень длинную дюну и разбил его на огромное число участков, которые пронумеровал от 1 до 109.
Теория Григория Георгиевича гласит, что изначально высота песка относительно некоторой условной отметки на всех участках была равна нулю. После этого произошло n сильных порывов ветра, которые могли изменить ландшафт.
Порыв ветра номер i имел силу xi и действовал на участки с li-го по ri-й. В результате этого порыва высота участка номер li увеличилась на xi, высота участка номер li + 1 уменьшилась на xi, следующего — снова увеличилась на xi, и так далее до участка номер ri, включительно.
Зная всю информацию о всех n порывах ветра, Григорий Георгиевич хочет узнать установившуюся в итоге высоту некоторых интересующих его m участков. Помогите ему.

Формат входных данных
В первой строке входного файла содержатся два натуральных числа n и m (1 ≤ n,m ≤ 1000) — количество порывов ветра и количество участков, итоговая высота которых интересует Григория Георгиевича.
В каждой из следующих n строк содержится описание очередного порыва ветра — три целых числа li, ri, xi (1 ≤ li ≤ ri ≤ 109; 1 ≤ xi ≤ 1000).
В каждой из следующих m строк содержится целое число qi (1 ≤ qi ≤ 109) — номер участка, для которого требуется узнать его итоговую высоту. Номера участков приведены в возрастающем
порядке.
 
Формат выходных данных
Для каждого из m запросов выведите одно целое число — высоту соответствующего участка.

Пример
Ввод:
2 6
1 6 7
3 7 2
1
2
3
6
7
8
Вывод
7
-7
9
-9
2
0

Раздача конфет

Цикл while Задачи на моделирование

У учительницы есть X конфет. Она раздаёт их ученикам по очереди, давая каждому по Z конфет. Последний ученик может получить неполную порцию, если конфет останется меньше Z. Учеников в школе достаточно много. Напишите программу, которая выведет, сколько конфет получил каждый ученик.

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

  • X — количество конфет - целое число не больше 100

  • Z — конфет каждому - целое число не больше 10
    Каждое число в отдельной строке

Выходные данные: номер ученика и количество конфет через пробел (каждая пара на новой строке).