Алгоритмы

2 280 задачвместе с подтемами
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.
Клуб Юных Хакеров организовал на своем сайте форум. Форум имеет следующую структуру: каждое сообщение либо начинает новую тему, либо является ответом на какое-либо предыдущее сообщение и принадлежит той же теме. 
 
После нескольких месяцев использования своего форума юных хакеров заинтересовал вопрос - какая тема на их форуме наиболее популярна. Помогите им выяснить это.
 
Входные данные
В первой строке вводится целое число N - количество сообщений в форуме (1 <= N <= 1000). Следующие строки содержат описание сообщений в хронологическом порядке. 
 
Описание сообщения, которое представляет собой начало новой темы, состоит из трех строк. Первая строка содержит число 0. Вторая строка содержит название темы. Длина названия не превышает 30 символов. Третья строка содержит текст сообщения. 
 
Описание сообщения, которое является ответом на другое сообщение, состоит из двух строк. Первая строка содержит целое число - номер сообщения, ответом на которое оно является. Сообщения нумеруются, начиная с единицы. Ответ всегда появляется позже, чем сообщение, ответом на которое он является. Вторая строка содержит текст сообщения. 
 
Длина каждого из сообщений не превышает 100 символов.
 
Выходные данные
Выведите название темы, к которой относится наибольшее количество сообщений. Если таких тем несколько, то выведите первую в хронологическом порядке
 
Ввод Вывод
2
0
topic 1
body of message 1
0
topic 2
body of message 2
topic 1

 
Дано N целых чисел, которые требуется отсортировать в порядке неубывания. В связи с нормами СЭС среди чисел не будет двух, разница между которыми превышает 107.
 
Входные данные
Первая строка входного файла содержит целое число N. (1 <= N <= 100000), вторая строка – N целых чисел, не превышающих по модулю 2*109. Никакие два не различаются более, чем на 107.
 
Выходные данные
Выведите данные числа в порядке неубывания.
 
Ввод Вывод
1
863961129 
863961129 
5
1866455200 1866455199 1866455198 1866455197 1866455196 
1866455196 1866455197 1866455198 1866455199 1866455200 
Слово называется анаграммой другого слова, если оно может быть получено перестановкой его букв.
 
Формат входных данных
Даны два слова на отдельных строках. Слова состоят из строчных латинских букв и цифр. Длины слов не превышают 255.
 
Формат выходных данных
Требуется вывести "YES"  – если введенные слова являются анаграммами друг друга, "NO"  – если нет.
Имеется стол длины L. На столе разложено N носков так, что никакой носок не вылезает за границы стола. Далее имеется умный мальчик Васёк, который хочет (сугубо в корыстных целях) замерить толщину покрытия стола носками в M точках.
 
Формат входных данных
Во входном файле даны сначала L, N, M (1 ≤ L ≤ 10000, 1 ≤ N ≤ 10000, 1 ≤ M ≤ 100000). Далее идут N пар чисел lr от 1 до L – левые и правые концы носков. Затем идут M чисел от 1 до L интересующие Васька точки.
 
Формат выходных данных
Выведите M чисел – толщину носкового покрытия в каждой точке.
Реализуйте алгоритм сортировки подсчетом для произвольных чисел, по модулю не превосходящих 10000.
 
Входные данные
На вход программе сначала подается значение n <= 100000 – количество элементов массива. В следующей строке расположены сами элементы – целые числа, по модулю не превосходящие 10000.
 
Выходные данные
Выведите на экран отсортированный по неубыванию массив.
 
Примеры
Входные данные Выходные данные
1
5
1 3 4 2 5
1 2 3 4 5
Даны два неупорядоченных набора целых чисел (может быть, с повторениями). Выдать без повторений в порядке возрастания все те числа, которые встречаются в обоих наборах.
 
Входные данные
В первой строке входного потока записано через пробел два целых числа N и М (1 ≤ N, М ≤ 300 000) — количество элементов первого и второго наборов, соответственно. В следующих двух строках записано сначала N чисел первого набора, а затем M чисел второго набора. Числа разделены пробелами. Каждое из этих чисел попадает в промежуток от 0 до 105.
 
Выходные данные
Необходимо вывести в возрастающем порядке без повторений все числа, которые входят как в первый, так и во второй набор. Числа разделять одним пробелом. Если таких чисел нет, то ничего выводить не нужно.
 
Входные данные Выходные данные
11 6
2 4 6 8 10 12 10 8 6 4 2
3 6 9 12 15 18
6 12
Дан связный ациклический ориентированный граф. Каждая вершина данного графа кроме листьев имеет по 2 сына.
Найдите количество способов топологически отсортировать, зная только количество вершин.
 
Входные данные
Входная строка содержит одно натуральное число n - кол-во вершин (n <= 15).

Выходные данные  
Выведите ответ на задачу.
 
Примеры
Входные данные Выходные данные
1 7 48
Дан связный ациклический ориентированный граф. Найдите его лексикографически минимальную топологическую сортировку.
 
Входные данные
В первой строке вводится количество вершин n (1 <= n <= 10000). Во второй строке водится n чисел ai (0 <= ai <= n, ai != i). Значение ai - предок вершины с номером i (вершины нумеруются с 1). Если ai = 0, то вершина i является корнем и не имеет предков, гарантируется, что таких вершин ровно 1.
 
Выходные данные
Решение должно вывести n чисел - лексикографически минимальную топологическую сортировку.
 
Примеры
Входные данные Выходные данные
1
4
2 0 1 2
2 1 3 4
В августе Владлена Александровна решила составить расписание для 9 «И» класса. Она считает, что уроков в один день должно быть N (2<=N<=8). От учителей она получила M (1<=N) запросов. Так как Владлена Александровна учитель географии, то с компьютером опыт работы у нее не такой как у вас, она просит вас о помощи, решите эту «невыполнимую» задачу, соблюдая запросы учителей.

Входные данные:  В первой строке входных данных содержится число N – кол-во уроков и число M – количество последовательных пар уроков наверное.
В следующих M строках задаются 2 слова, которые обозначают названия предметов.
Известно что, граф не может зациклиться и предметы не могут быть в расписании 2 раза
Слова, которые можно вводить: PE,Math, Russian, Biology,Geometry, Literature, Science, Geography
 
Выходные данные: Задача — выстроить предметы в подходящем для всех пар порядке.
 
Ввод Вывод
3 2
PE Math
Math Literature
PE
Math
Literature

(c) Бганцова А., 2018 г.
Группа солдат-новобранцев прибыла в армейскую часть N777. После знакомства с прапорщиком стало очевидно, что от работ на кухне по очистке картофеля спасти солдат может только чудо. 
 
Прапорщик, будучи не в состоянии запомнить фамилии, пронумеровал новобранцев от 1 до N. После этого он велел им построиться по росту (начиная с самого высокого). С этой несложной задачей могут справиться даже совсем необученные новобранцы, да вот беда, прапорщик уверил себя, что знает про некоторых солдат, кто из них кого выше, и это далеко не всегда соответствует истине. 
 
После трех дней обучения новобранцам удалось выяснить, что знает (а точнее, думает, что знает) прапорщик. Помогите им, используя эти знания, построиться так, чтобы товарищ прапорщик остался доволен. 
 
Входные данные 
Сначала на вход программы поступают числа N и M (1 < N <= 100, 1 <= M <= 5000) – количество солдат в роте и количество пар солдат, про которых прапорщик знает, кто из них выше. Далее идут эти пары чисел A и B по одной на строке (1 <= A,B <= N), что означает, что, по мнению прапорщика, солдат A выше, чем B. Не гарантируется, что все пары чисел во входных данных различны. 
 
Выходные данные 
В первой строке выведите "Yes" (если можно построиться так, чтобы прапорщик остался доволен) или "No" (если нет). После ответа "Yes" на следующей строке выведите N чисел, разделенных пробелами, - одно из возможных построений. 
Примеры
Входные данные Выходные данные
1
4 5 
1 2 
2 3 
3 4 
1 4 
4 1
No

(c) Пасынков С., 2018 г.
В одном королевстве n городов и m дорог. У каждого города есть своё название, состоящее из строчных латинских букв. Но королю не нравится, что есть дороги, ведущие из города с названием, являющимся лексикографически меньшим названия конечного. Он захотел это исправить, поменяв города, к которым относятся те или иные названия. Сам он, конечно, не справится. Помогите ему в этом! 
 
Формат файла входных данных: 
Первая строка содержит два целых числа n и m (2 <= n <= 1000; 1 <= M <= 10000) - количество городов и дорог в королевстве соответственно. 
 
Вторая строка содержит n строк, описывающих города. Описание задаётся строкой из строчных латинских букв - названия города. 
 
Далее в m строках перечислены дороги. Каждая дорога задаётся парой чисел - номерами начального и конечного городов соответственно. Дороги односторонние. 
 
Формат файла выходных данных: 
Вывести n чисел, каждое из которых обозначает номер названия, соответствующего i-ому городу. Если решения не существует, вывести -1.
 
Ввод Вывод
4 4 
aaa bacc cqe de 
1 4 
4 2 
4 3 
3 2
1 4 3 2
3 3 
fi bru a 
1 2 
2 3 
3 1
-1
(с) Филимонов И.
В некотором списке записана информация о годе рождения каждого из N человек. Определить наибольший порядковый номер самого младшего по возрасту человека (считая с 1). 

Входные данные
В первой строке задается число N - число человек (0<N<=50). Во второй строке задаются года рождения N человек (N чисел).

Выходные данные
Выведите наибольший номер самого младшего человека.
 
Пример
Входные данные Выходные данные
1 5
1904 1903 1905 1905 1903
4
Дана дробь \(a \over b\). Требуется ее сократить, то есть записать это же число в виде \(c \over d\), где c — целое число, d - натуральное число и d минимальное возможное.
 
Входные данные 
Вводятся два целых числа a и b (\(-100<=a<=100,\ 0<b<=100\)).

Выходные данные 
Выведите два числа c и d.
 
Примеры
Входные данные Выходные данные
1 3 6  1 2
2 -2 5 -2 5
Одной из наиболее распространенных опечаток при наборе текста является перестановка двух соседних символов, например, вместо слова «программа» набрано слово «прогармма». Расстояние Левенштейна не учитывает такие опечатки: при вычислении расстояния Левенштейна одна перестановка будет считаться за два редактирования (например, удаление и вставка символа).
 
При вычислении расстояния Дамерау-Левенштейна, помимо операций замены, вставки и удаления символа допускается еще операция перестановки двух соседних символов. При этом между переставленными символами нельзя вставлять другие символы.
 
Определите расстояние Дамерау-Левенштейна для двух данных строк.

Входные данные
Программа получает на вход две строки, длина каждой из которых не превосходит 1000 символов, строки состоят только из заглавных латинских букв.
 
Выходные данные
Требуется вывести одно число – расстояние Дамерау-Левенштейна для данных строк.
 
Примеры
Входные данные Выходные данные
1
XABCDE
ACBYDF
4
Проверить, является ли последовательность подпоследовательностью заданного массива.
 
Входные данные
В первой строке входных данных содержится число N – длина заданной последовательности (1 ≤ N ≤ 10000). Во второй строке заданы члены исходной последовательности (через пробел) – целые числа, не превосходящие 10000 по модулю.
 
В третьей строке записано число M – длина подпоследовательности (1 ≤ M ≤ 10000). В четвертой строке задаются члены подпоследовательности (через пробел) – целые числа, не превосходящие 10000 по модулю.

Выходные данные
Вывести "YES" если последовательность заданная в 4-ой строке является подпоследовательность заданного массива и "NO", если не является.
 
Ввод Вывод
10
1 2 3 4 5 6 7 8 9 10
10
1 2 3 5 4 6 7 8 9 10
NO
10
1 2 3 4 5 6 7 8 9 10
9
1 2 3 5 6 7 8 9 10
YES

Пояснение.
Не путать "подпоследовательность" с "подстрокой".
Шаблоном называется строка, состоящая из английских букв (a, ..., z, A, ..., Z) и символов ? и *. Каждый из символов ? разрешается заменить на одну произвольную букву, а каждый из символов * – на произвольную (возможно пустую) последовательность букв. Про любую строку из букв, которую можно получить из шаблона такими заменами, будем говорить, что она удовлетворяет этому шаблону.
 
Имеются два шаблона. Требуется найти строку минимальной длины, которая удовлетворяет обоим шаблонам, либо выдать сообщение, что такой строки не существует.
 
Входные данные
Заданные шаблоны записаны в первых двух строках входных данных. Длина каждого шаблона не превосходит 80 символов.

Выходные данные
Выведите строку минимальной длины, удовлетворяющую обоим шаблонам, либо сообщение "No solution!"
 
Примеры
Входные данные Выходные данные
1
AB?
*BC
ABC
Дана текстовая строка. С ней можно выполнять следующие операции:
  1. Заменить один символ строки на другой символ.
  2. Удалить один произвольный символ.
  3. Вставить произвольный символ в произвольное место строки.
 
Например, при помощи первой операции из строки "СОК" можно получить строку "СУК", при помощи второй операции - строку "ОК", при помощи третьей операции - строку "СТОК.
Минимальное количество таких операций, при помощи которых можно из одной строки получить другую, называется стоимостью редактирования или расстоянием Левенштейна.
 
Определите расстояние Левенштейна для двух данных строк.
 
Входные данные
Программа получает на вход две строки, длина каждой из которых не превосходит 1000 символов, строки состоят только из заглавных латинских букв.
 
Выходные данные
Требуется вывести одно число – расстояние Левенштейна для данных строк.
 
 
Примеры
Входные данные Выходные данные
1
ABCDEFGH
ACDEXGIH
3


 
Даны две последовательности, требуется найти и вывести их наибольшую общую подпоследовательность.
 
Входные данные
В первой строке входных данных содержится число N – длина первой последовательности (1 ≤ N ≤ 1000). Во второй строке заданы члены первой последовательности (через пробел) – целые числа, не превосходящие 10000 по модулю.
 
В третьей строке записано число M – длина второй последовательности (1 ≤ M ≤ 1000). В четвертой строке задаются члены второй последовательности (через пробел) – целые числа, не превосходящие 10000 по модулю.
 
Выходные данные
Требуется вывести наибольшую общую подпоследовательность данных последовательностей, через пробел.
 
Примеры
Входные данные Выходные данные
1
3
1 2 3
2 3 1
2 3
Даны две последовательности, требуется найти длину их наибольшей общей подпоследовательности.
 
Входные данные
В первой строке входных данных содержится число N – длина первой последовательности (1 ≤ N ≤ 1000). Во второй строке заданы члены первой последовательности (через пробел) – целые числа, не превосходящие 10000 по модулю.
 
В третьей строке записано число M – длина второй последовательности (1 ≤ M ≤ 1000). В четвертой строке задаются члены второй последовательности (через пробел) – целые числа, не превосходящие 10000 по модулю.
 
Выходные данные
Требуется вывести одно число – длину  наибольшей общей подпоследовательности двух данных последовательностей или 0, если такой подпоследовательности нет.
 
 
Примеры
Входные данные Выходные данные
1
3
1 2 3
2 3 1
2
На окружности заданы N точек, надо найти пару точек, расстояние между которыми (по хорде окружности) максимально. 

Входные данные
В первой строке задано N (1 <= N <= 100 000).
В следующей строке даны N пар вещественных чисел. Сначала описывается координата x, потом – y.

Выходные данные
Вывести два числа – номера точек, расстояние между которыми максимально. Сначала идет наименьшее число, потом наибольшее.
 
Ввод Вывод
3
1.4142 1.4142
0 2
-1.4142 -1.4142
1 3

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