Алгоритмы

2 280 задачвместе с подтемами
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.
Сегодня в Москве отмечается Новый год. Для танца составили схему, на которой показано кто и где находится. Есть несколько групп людей, одетых в разных персонажей. 

Е-елка
О-охрана
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и
Ни для кого не секрет, что Дед Мороз передвигается на особом транспортном средстве, принцип которого известен только самым приближенным зайцам Дедам Мороза. Однако, зайцы немного слабы в составлении маршрутов, и вам придется помочь им.

Принцип работы транспортного средства Деда Мороза(в дальнейшем ПепеЛАЦ(Пепе Летающий агрегат Цвайхандер)) такой:
на расстоянии одного километра друг от друга в точках (0, 0) и (1, 0) были построены две станции управления пепелацами A и B. С помощью них можно мгновенно переместить любой пепелац, повернув его на 90 градусов по или против часовой стрелки относительно точки A или B. Расстояние от пепелаца до соответствующей станции при этом не меняется. Следующее перемещение можно делать как относительно той же станции, так и относительно другой.

Например, если повернуть пепелац, находящийся в точке (3, 1) на 90 градусов против часовой стрелки относительно станции A, то он переместится в точку (−1, 3), если его затем повернуть на 90 градусов по часовой стрелке относительно станции B, то он переместится в точку (4, 2), если затем повернуть его вокруг станции B по часовой стрелке еще раз, он переместиться в точку (3, −3).
Деду Морозу необходимо добраться из точки (x1, y1) в точку (x2, y2). Помогите зайцам Деда Мороза составить маршрут, чтобы ему меньше пришлось ходить по заснеженному лесу.
Поскольку перемещения мгновенные и абсолютно бесплатные(магия же), то минимизировать количество перемещений не надо.

Формат входного файла
Входной файл содержит четыре целых числа — x1, y1, x2 и y2, они не превышают 104 по
абсолютной величине.

Формат выходного файла
Выведите в выходной файл последовательность перемещений с использованием станций управления, которая перемещает пепелац из точки (x1, y1) как можно ближе к точке (x2, y2).
Поворот по часовой стрелке относительно станции A обозначается как «+A», поворот против часовой стрелки относительно станции A обозначается как «-A», соответствующие повороты относительно станции B обозначаются как «+B» и «-B». Выводите по одному перемещению на строке. Выведенная последовательность не обязана быть минимальной по количеству перемещений, но должна содержать не более 106 действий.

Примеры

Ввод Вывод
3 1
3 -3
-A   
+B
+B
0 0
3 0
-B
+B

 (с) Павел Колодкин, 12И
Герцог Циклонский, обладая безграничным могуществом, что отражено в его девизе "Все могу!", ежегодно проводит конкурс среди приглашенных на исполнение самого заветного желания.
Отбор проводится следующим образом: все претенденты рассаживаются на пронумерованных стульях (нумерация стульев начинается с 1) вокруг Большого Круглого стола, после чего посредством Константы счета начинается отсчет по часовой стрелке.
Претендент, на которого падает Константы счета, обязан освободить место, отсчет продолжается до тех пор, пока не останется два человека. 
Требуется при известном числе гостей N и Константы счета С определить номера стульев, которые нужно занять, чтобы попасть в число этих двух "счастливчиков".

Входные данные
В первой строке вводится число N (\(1<=N<=100\))  - количество приглашенных претендентов. Во второй строке вводится Константы счета (\(С<=100\)).

Выходные данные
Необходимо вывести через пробел два числа - номера стульев "счастливчиков".
 
Примеры
Входные данные Выходные данные
1 5
3
2 4
Известны значения роста всех учащихся класса. Определите рост учащегося, который при построении учащихся по росту, в порядке возрастания, занимал бы 10-е место при счете от самого высокого ученика.

Нельзя использовать встроенную сортировку.
 
Входные данные
В первой строке вводится натуральное число N - количество учащихся класса (11 <= N <= 35).
Во второй строке вводятся N целых чисел - рост учащихся.

Выходные данные
Необходимо вывести на экран значение роста учащегося, который бы занимал 10-е место по росту в порядке убывания, при счете от самого высого ученика.
 
Пример
Входные данные Выходные данные
1 12
148 144 154 145 155 130 157 136 152 130 177 166
136
Жюри составило отчет об учебно-тренировочных сборах по информатике и собирается распечатать его на стандартном листе бумаги. Весь отчет набран одним моноширинным шрифтом, т.е. все символы (включая пробелы) имеют одинаковую ширину. Длина строки при печати этим шрифтом на листе бумаги равна S.
 
Назовем пустотой последовательность пробелов между соседними словами в строке, а также от начала строки до первого слова в ней и от последнего слова в строке до конца строки. Проблема, стоящая перед жюри, состоит в том, что научный руководитель сборов Владимир Михайлович Кирюхин отказывается читать текст, если сумма кубов длин пустот по всем строкам не минимальна. Помогите жюри расположить отчет на листе бумаги так, чтобы В.М. Кирюхин согласился его прочесть и утвердить результаты сборов.
 
Для достижения требуемого расположения текста на бумаге разрешается заменять произвольную пробельную последовательность (т.е. непустую последовательность подряд идущих пробелов или символов перевода строки) любой другой пробельной последовательностью.
 
Входные данные
Первая строка входного файла содержит целое число S (1<=S<=80). 
В последующих строках записан отчет, содержащий не более 500 слов. 
Длина каждой строки отчета не превосходит 250 символов, а длина каждого слова не превос-ходит S.
 
Выходные данные
Вывести в первую строку выходного файла минимально возможную сумму 
кубов пустот по всем строкам. В последующие строки следует вывести 
искомое расположение текста на листе бумаги.
 
Пример входного файла
30
Победители летних учебно-тренировочных сборов по информатике 1997 г.:
Владимир Мартьянов,
Анатолий Пономарев,
Николай Дуров,
Андрей Лопатин.
 
Пример выходного файла
325
     Победители     летних    
учебно-тренировочных сборов по
 информатике 1997 г.: Владимир
Мартьянов, Анатолий Пономарев,
Николай Дуров, Андрей Лопатин.
 
За билетами на премьеру нового мюзикла выстроилась очередь из N человек, каждый из которых хочет купить 1 билет. На всю очередь работала только одна касса, поэтому продажа билетов шла очень медленно, приводя "постояльцев" очереди в отчаяние. Самые сообразительные быстро заметили, что, как правило, несколько билетов в одни руки кассир продаёт быстрее, чем когда эти же билеты продаются по одному. 
Поэтому они предложили нескольким подряд стоящим людям отдавать деньги первому из них, чтобы он купил билеты на всех. 
 
Однако для борьбы со спекулянтами кассир продавала не более 3-х билетов в одни руки, поэтому договориться таким образом между собой могли лишь 2 или 3 подряд стоящих человека.
 
Известно, что на продажу i-му человеку из очереди одного билета кассир тратит Ai секунд, на продажу двух билетов - Bi секунд, трех билетов - Ci секунд. Напишите программу, которая подсчитает минимальное время, за которое могли быть обслужены все покупатели.
 
Обратите внимание, что билеты на группу объединившихся людей всегда покупает первый из них. Также никто в целях ускорения не покупает лишних билетов (то есть билетов, которые никому не нужны).
 
Входные данные: 
- в первой строке записано число N - количество покупателей в очереди (\(1<=N<=5000\));
- далее идет N троек натуральных чисел Ai, Bi, Ci. Каждое из этих чисел не превышает 3600. Люди в очереди нумеруются начиная от кассы.
 
Выходные данные: выведите одно число - минимальное время в секундах, за которое могли быть обслужены все покупатели.
 
 
Примеры
Входные данные Выходные данные
1
5
5 10 15
2 10 15
5 5 5
20 20 1
20 1 1
12
2
2
3 4 5
1 1 1
4
Требуется определить подходит ли заданное слово под заданный шаблон. Шаблон задается большими латинскими буквами, знаками "?" - любой символ, "*" - любая последовательность символов (даже пустая).
 
Входные данные 
В первых двух строках записаны шаблон и слово: в одной из них записан шаблон - последовательность больших  латинских букв, "?" и "*", в другой  - слово, состоящее только из больших латинских букв (строки короче 100 символов).

Выходные данные
Вывести YES, если слово подходит, NO, если не подходит.
 
Примеры
Входные данные Выходные данные
1
ABBCDA
A*CDA
YES
2
AADAAVA
A*DA*AA*
NO
 
Шахматная ассоциация решила оснастить всех своих сотрудников такими телефонными номерами, которые бы набирались на кнопочном телефоне ходом коня. Например, ходом коня набирается телефон 340-4927. При этом телефонный номер не может начинаться ни с цифры 0, ни с цифры 8.
 
Клавиатура телефона выглядит так:
7 8 9
4 5 6
1 2 3
  0  
 
Напишите программу, определяющую количество телефонных номеров длины N, набираемых ходом коня.
 
Входные данные: на вход подается целое число N (\(1<=N<=50\)).
 
Выходные данные: выведите файл искомое количество телефонных номеров.
 

Примеры
Входные данные Выходные данные
1 2 16
Дана последовательность, требуется найти длину наибольшей возрастающей 
подпоследовательности.
 
Входные данные
В первой строке входного файла записано число N - длина последовательности  (1 <= N <= 1000). Во второй строке записана сама последовательность  (через пробел). Числа последовательности - целые числа,  не превосходящие 10000 по модулю.
 
Выходные данные
В выходной файл требуется вывести наибольшую длину возрастающей подпоследовательности.
 
Примеры
Входные данные Выходные данные
1
6
3 29 5 5 28 6
3
 
 
 
На прямой дощечке вбиты гвоздики. Любые два гвоздика можно соединить ниточкой. Требуется соединить какие-то пары гвоздиков ниточками так, чтобы к каждому гвоздику была привязана хотя бы одна ниточка, а суммарная длина всех ниточек была минимальна.
 
Входные данные: 
- в первой строке записано число N - количество гвоздиков (\(2 <= N <= 100\));
- в следующей строке записано N чисел - координаты всех гвоздиков (неотрицательные целые числа, не превосходящие 10000).
 
Выходные данные: выведите единственное число - минимальную суммарную длину всех ниточек.
В прямоугольной таблице NxM (в каждой клетке которой записано некоторое число) в начале игрок находится в левой верхней клетке.
За один ход ему разрешается перемещаться в соседнюю клетку либо вправо, либо вниз (влево и вверх перемещаться запрещено).
При проходе через клетку с игрока берут столько у.е., какое число записано в этой клетке (деньги берут также за первую и последнюю клетки его пути).
 
Требуется найти минимальную сумму у.е., заплатив которую игрок может попасть в правый нижний угол.
 
Входные данные
В первой строке записаны два числа N и M - размеры таблицы (\(1<=N<=20\), \(1<=M<=20\)). Далее записаны N строк по M чисел в каждой - размеры штрафов в у.е. за прохождение через соответствующие клетки (каждое число от 0 до 100).
 
Выходные данные
Выведите минимальную сумму, потратив которую можно попасть в правый нижний угол.
 
 
Примеры
Входные данные Выходные данные
1
3 4
1 1 1 1
5 2 2 100
9 4 2 1
8
Будем рассматривать только строчки, состоящие из заглавных латинских букв. Например, рассмотрим строку AAAABCCCCCDDDD. Длина этой строки равна 14. Поскольку строка состоит только из латинских букв, повторяющиеся символы могут быть удалены и заменены числами, определяющими количество повторений. Таким образом, данная строка может быть представлена как 4AB5C4D. Длина такой строки 7. Описанный метод мы назовем упаковкой строки. 
 
Напишите программу, которая берет упакованную строчку и восстанавливает по ней исходную строку.
 
Выходные данные
Входной файл содержит одну упакованную строку. В строке могут встречаться только конструкции вида nA, где n - количество повторений символа (целое число от 2 до 99), а A - заглавная латинская буква, либо конструкции вида A, то есть символ без числа, определяющего количество повторений. Максимальная длина строки не превышает 80.
 
Выходные данные
В выходной файл выведите восстановленную строку. При этом строка должна быть разбита на строчки длиной ровно по 40 символов (за исключением последней, которая может содержать меньше 40 символов).
 
Примеры
 
Ввод Вывод
3A4B7D                      AAABBBBDDDDDDD
22D7AC18FGD
DDDDDDDDDDDDDDDDDDDDDDAAAAAAACFFFFFFFFFF
FFFFFFFFGD
95AB
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAB
40AB39A
 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 
Сколько раз встречается?
 
Входные данные
Вам дается две строки. Длина каждой из строк не превышает 255 символов.

Выходные данные
Посчитайте и выведите на экран, сколько раз первая строка встречается в качестве подстроки во второй.
 

 

Примеры
Входные данные Выходные данные
1
abab
abababcab
2

Пояснение: подстрока abab встречается во второй строке дважды, начиная с 1-го и 3-го символа.

Найдите в тексте 1543.

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

Выходные данные
Если в нем встречается число 1543, выведите слово URA, если же 1543 в файле не встречается, выведите NO.
 
Примеры
Входные данные Выходные данные
1 hgdfjgkdghkdjgkgkd1543gjdlgkdjlg URA
2 1=5 4=3 NO
На день рождения пришли N человек. В некоторый момент именинник  решил, что пора устроить какую-нибудь игру. Он выяснил, что i-й человек  согласен вступить в игру, если в ней уже принимают участие не менее A[i] и не более B[i] человек. Единожды вступив в игру, никто из нее 
не выходит.

Требуется выяснить, может ли именинник установить такую 
последовательность вступления в игру, что в итоге все 
присутствующие станут ее участниками. (Сам именинник в игре участия 
не принимает.) 
 
Входные данные. 
Сначала вводится количество гостей N (1<=N<=100). Затем вводится 
N пар чисел A[i] и B[i] (все эти числа из диапазона от 0 до N-1).
 
Выходные данные. 
Если можно установить последовательность вступления гостей в игру, 
чтобы в итоге все стали ее участниками, то нужно вывести номера гостей 
в том порядке, в каком они могут вступать в игру. Если всех вовлечь 
в игру не удастся, выведите одно число - 0.
 
Пример 1
Пример входного файла
5
4 4
0 3
1 4
1 3
2 2
 
Пример выходного файла
2 3 5 4 1
 
Пример 2
Пример входного файла
3
1 1
1 1
1 1
 
Пример выходного файла
0
 
Пример 3
Пример входного файла
1
0 0
 
Пример выходного файла
1
Главный повар решил устроить в лицее День Уважения к Повару. Для этого он приготовил лицеистам N необычайно вкусных котлет и втайне постановил, что первый пожаловавший отведать поварское кушанье школьник должен получить наибольшее количество вкусных котлет, а каждый последующий - строго меньше, чем предыдущий (повару очень не нравилось, когда к приготовленному им обеду опаздывали и тот вынужден был остывать).
 
Конечно, введенное правило оставляет существенный произвол в числе котлет, получаемых очередным явившимся лицеистом, и это число не в последнюю очередь  будет зависеть от предыдущего поведения лицеиста в столовой, а также от волшебных слов, произносимых им. Например, 6 котлет могут быть в  результате распределены по одной из следующих четырех схем: 3+2+1 (три котлеты первому из пришедших школьников, две - второму и одну - третьему), 4+2, 5+1 и 6 (все котлеты съедает счастливчик, пришедший первым).
 
Напишите программу, определяющую, каким количеством различных способов повар может распределить приготовленное лакомство среди школьников.
 
Входные данные
Входной файл содержит одно целое число N - количество приготовленных поваром котлет (0<=N<=200).
 
Выходные данные
Выходной файл должен содержать одно целое число, равное количеству возможных распределений котлет.

 

Примеры
Входные данные Выходные данные
1 6 4
 
Дана последовательность чисел. Найти в ней наименьшее число.
 
Входные данные.
Задано сначала число N (количество чисел в последовательности), а затем
N чисел. Все числа - из диапазона Integer. N<=100
 
Выходные данные.
Выведите наименьшее число.
 
 
Нам дана числовая последовательность a1, ..., an . Напишите программу, отвечающую на запросы вида "найти длину наибольшей строго возрастающей подпоследовательности, все элементы которой находятся на отрезке с li-ого по ri-ый элемент".
Подпоследовательностью последовательности a1 , ..., an называется последовательность, которую можно получить путем удаления нескольких элементов ai (относительный порядок оставшихся элементов менять запрещается). Так, например, последовательность (2, 4) является подпоследовательностью последовательности (1, 2, 3, 4, 5) (можно удалить элементы 1, 3  и 5 ),  а последовательность (5, 1) - нет.
 
Входные данные
В первой строке записано целое число n  (1 <= n <= 3000 ) - число элементов в последовательности. Во второй строке записано n  чисел, разделенных пробелами - элементы последовательности. Все элементы не превосходят по модулю 109. В третьей строке записано одно целое число q  (1 <= q <= 105) - количество запросов. В следующих q  строках описаны запросы. Описание i -ого запроса - два числа li и rj (1 <= li <= ri <= n) ,  записанные через пробел.
 
Выходные данные
Выведите q чисел - ответы на запросы. Числа следует выводить по одному на строке в том же порядке, в котором запросы описаны во вводе.
 
Примеры
Входные данные Выходные данные
1 6
3 3 -5 7 4 9
6
1 4
1 2
2 3
1 5
3 5
2 5
2
1
1
2
2
2
Слияние двух упорядоченных последовательностей чисел в одну упорядоченную  основная идея сортировки слиянием. Эта сортировка работает быстро, а слияние двух упорядоченных после-
довательностей легко выполняется в том числе и человеком вручную.

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

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

Ввод Вывод
2
? 4
3 ?
1 3 4 5
1 4
3 5

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

Инна любит гулять по крышам. Она стоит на крыше здания с номером 1 и хочет попасть на крышу здания с номером n.

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

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

Формат входных данных
В первой строке задано натуральное число n — число зданий в Иннополисе (n<= 105). В следующих n строках заданы крыши зданий. Каждая из этих строк содержит четыре целых числа xi1, yi1, xi2 и yi2 — координаты противоположных вершин прямоугольника, описывающего крышу здания (xi1 < xi2; yi1 < yi2) Гарантируется, что никакие два прямоугольника не имеют общих точек. Все координаты — неотрицательные целые числа и <= 109

Формат выходных данных
Выведите одно целое число — минимальное количество прыжков, которые Инна должна совер- шить, чтобы добраться с крыши здания 1 до крыши здания n. Если же Инна не может добраться до крыши n-го здания, выведите -1.
Ввод Вывод
4
0 0 3 2
1 6 4 8
1 3 4 5
7 7 10 9
3
3
0 0 3 2
1 3 4 5
7 7 10 9
-1
Поделиться
Класснуть