Онлайн-курс "Основы C/C++ для спортивного программирования"
Онлайн-курс "Быстрый старт в спортивное программирование"
Видеозапись лекций курса "Введение в алгоритмы" ДВФУ
Видеозапись лекций курса "Язык Питон" ДВФУ
Практические задания курса "Язык Питон" ДВФУ
Справочник по алгоритмам: Викиконспекты
Автор: | unknown | Ограничение времени: | 5 сек | |
Входной файл: | input.txt | Ограничение памяти: | 200 Мб | |
Выходной файл: | output.txt | |||
Максимальный балл: | 4 |
№ | Входной файл (input.txt ) |
Выходной файл (output.txt ) |
---|---|---|
1 |
|
|
2 |
|
|
Автор: | A. Klenin | Ограничение времени: | 5 сек | |
Входной файл: | input.txt | Ограничение памяти: | 200 Мб | |
Выходной файл: | output.txt | |||
Максимальный балл: | 1 |
№ | Входной файл (input.txt ) |
Выходной файл (output.txt ) |
---|---|---|
1 |
|
|
Автор: | Московская олимпиада для 7-9 кл., 2005 | Ограничение времени: | 3 сек | |
Входной файл: | d.in | Ограничение памяти: | 256 Мб | |
Выходной файл: | d.out | |||
Максимальный балл: | 100 |
Во входном файле записана строка текста, в которой могут встречаться:
-
, обозначающий в некоторых случаях тире, а в некоторых — дефис.Слово — это последовательность подряд идущих латинских букв и знаков дефис, ограниченная с обоих концов. В качестве ограничителей могут выступать начало строки, конец строки, пробел, знак препинания, тире. Тире отличается от дефиса тем, что слева и справа от знака дефис пишутся буквы, а хотя бы с одной стороны от тире идет либо начало строки, либо конец строки, либо пробел, либо какой-либо знак препинания, либо еще одно тире.
Напишите программу, определяющую, сколько слов в данной строке текста.
№ | Входной файл (d.in ) |
Выходной файл (d.out ) |
---|---|---|
1 |
|
|
2 |
|
|
3 |
|
|
Автор: | А. Баранов | Ограничение времени: | 1 сек | |
Входной файл: | input.txt | Ограничение памяти: | 256 Мб | |
Выходной файл: | output.txt | |||
Максимальный балл: | 1 |
Пусть имеются две строки, содержащие набор слов, состоящих из цифр и символов латинского алфавита, и отделенных друг от друга пробелами либо знаками препинания ('-', '.', ',', ':', ';', '!', '?'). Регистр символов, а также количество подряд идущих пробелов роли не играет (любое число пробелов воспринимается как один символ). Пробелы, расположенные по краям строки либо отделяющие знаки препинания, игнорируются.
Для определения формата текста в пределах каждой такой строки используются теги следующих видов:
<b>текст</b> — жирный шрифт;
<i>текст</i> — курсив.
Также допускается использование нескольких вложенных друг в друга тегов. При этом внутренний тег сохраняет форматирование внешнего фрагмента.
Теги могут разбивать слово на части: <i><b>тек</b>ст</i>. В этом случае, отдельные части слова будут иметь различное форматирование.
В свою очередь, на пробельные символы форматирование не распространяется.
Требуется сравнить две такие строки.
Во входном файле "input.txt" содержатся две строки, между которыми необходимо выполнить сравнение.
Выходной файл "output.txt" должен содержать одно из следующих значений:
2 — текст в обеих строках совпадает и имеет одинаковый формат;
1 — текст в обеих строках совпадает, но имеет разный формат;
0 — обе строки содержат разный текст.
Полагается, что в исходных строках отсутствуют синтаксические ошибки,
связанные с порядком расстановки тегов.
Длина каждой строки не превосходит 3 ⋅ 106.
№ | Входной файл (input.txt ) |
Выходной файл (output.txt ) |
---|---|---|
1 |
|
|
2 |
|
|
3 |
|
|
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется написать программу, которая печатает все цвета радуги на русском языке. Каждый цвет вывести в отдельной строке с большой буквы.
Цвета должны быть выведены в кодировке WINDOWS-1251
.
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
|
|
Автор: | А. Баранов | Ограничение времени: | 1 сек | |
Входной файл: | input.txt | Ограничение памяти: | 256 Мб | |
Выходной файл: | output.txt | |||
Максимальный балл: | 1 |
Пусть имеется текстовая строка S, состоящая из произвольных печатных символов (ASCII 32-126). Требуется определить общее число ее подстрок, совпадающих с некоторым заданным образцом T.
Для решения задачи следует воспользоваться алгоритмом Кнута-Морриса-Пратта.
В заголовке входного файла "input.txt" содержится строка T, выступающая в роли образца. Далее следует строка S, в которой необходимо выполнить поиск.
Выходной файл "output.txt" должен содержать число найденных подстрок.
0 < |T| ≤ 5 ⋅ 104, 0 ≤ |S| ≤ 2 ⋅ 107
№ | Входной файл (input.txt ) |
Выходной файл (output.txt ) |
---|---|---|
1 |
|
|
2 |
|
|
Автор: | std.alg | Ограничение времени: | 2 сек | |
Входной файл: | Стандартный вход | Ограничение памяти: | 256 Мб | |
Выходной файл: | Стандартный выход | |||
Максимальный балл: | 1 |
Дана строка. Нужно уметь отвечать на запросы вида: равны ли подстроки [a… b] и [c… d].
Сперва строка S из строчных латинских букв. Далее число M — количество запросов.
В следующих M строках по четыре целых числа — запросы a, b, c, d.
Выведите M строк, по одному ответу для каждого запроса.
Ответ должен быть Yes
, если подстроки совпадают,
и No
в противном случае.
0 ≤ M ≤ 105, 1 ≤ a ≤ b ≤ |S|, 1 ≤ c ≤ d ≤ |S|, 1 ≤ |S| ≤ 105.
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
|
|
Автор: | А. Кленин | Ограничение времени: | 4 сек | |
Входной файл: | input.txt | Ограничение памяти: | 256 Мб | |
Выходной файл: | output.txt | |||
Максимальный балл: | 1 |
Будем говорить, что строки a и b имеют k различий, если длины этих строк
одинаковы, а символы в позициях с одинаковыми номерами совпадают все, кроме k штук.
Например, строки ABABAC
и BBABAB
имеют 2 различия.
По данной строке S длиной N символов и числу k требуется найти две подстроки одинаковой длины, начинающиеся с различных позиций, и имеющие не более k различий.
Входной файл содержит в первой строке целое число k, в во второй — строку S.
Выходной файл должен содержать целое число — длину самой длинной найденной подстроки, либо 0 (ноль), если решения не существует.
Строка S состоит из заглавных латинских букв.
0 ≤ k ≤ N ≤ 1000
№ | Входной файл (input.txt ) |
Выходной файл (output.txt ) |
---|---|---|
1 |
|
|
2 |
|
|
Автор: | std.alg | Ограничение времени: | 2 сек | |
Входной файл: | common.in | Ограничение памяти: | 256 Мб | |
Выходной файл: | common.out | |||
Максимальный балл: | 1 |
Найдите наибольшую общую подстроку строк s и t.
Первая строка входного файла содержит строку s, вторая — t (1 ≤ |s|, |t| ≤ 100,000). Строки состоят из строчных латинских букв.
Выведите одну строку — наибольшую общую подстроку строк s и t. В случае, если ответ не единственный, выведите минимальный лексикографически.
№ | Входной файл (common.in ) |
Выходной файл (common.out ) |
---|---|---|
1 |
|
|
Автор: | unknown | Ограничение времени: | 1 сек | |
Входной файл: | input.txt | Ограничение памяти: | 64 Мб | |
Выходной файл: | output.txt | |||
Максимальный балл: | 100 |
Расстояние Левенштейна (также редакционное расстояние или дистанция редактирования) между двумя строками — это минимальное количество операций вставки одного символа, удаления одного символа и замены одного символа на другой, необходимых для превращения одной строки в другую.
Даны два слова. Необходимо вычислить расстояние Левенштейна между ними.
№ | Входной файл (input.txt ) |
Выходной файл (output.txt ) |
---|---|---|
1 |
|
|
2 |
|
|
Автор: | Бойко | Ограничение времени: | 8 сек | |
Входной файл: | input.txt | Ограничение памяти: | 10 Мб | |
Выходной файл: | output.txt | |||
Максимальный балл: | 20 |
Дано N строк, состоящих из заглавных латинских букв (аминокислот). Требуется написать программу, определяющую пару строк с наименьшим расстоянием Левенштейна, включающего вставки, удаления и замены символов. Вес замены равен 2, вес вставки и удаления равен 1.
Во входном файле содержатся N строк.
Выходной файл должен содержать три целых числа — два различных номера строк, расстояние между которыми наименьшее, и само расстояние. Строки нумеруются от 1 до N.
N = 25. Длина строк не превосходит 1000 символов. Если существует несколько решений, выведите c минимальным N, минимизировать сначала первый номер, потом второй. Например 1 10, а не 2 9.
№ | Входной файл (input.txt ) |
Выходной файл (output.txt ) |
---|---|---|
1 |
|
|
Автор: | М. Спорышев | Ограничение времени: | 10 сек | |
Входной файл: | Стандартный вход | Ограничение памяти: | 1024 Мб | |
Выходной файл: | Стандартный выход | |||
Максимальный балл: | 1 |
Вам даны:
Числа D, E — штрафы за начало нового разрыва в выравнивании строк и штраф за его продолжение соответственно.
Алфавит символов в виде строки A, состоящей из заглавных латинских букв.
Матрица замен символов R, соответствующая стоимости сопоставления каждой пары символов при выравнивании строк. Строки и столбцы матрицы соответствуют символам алфавита в том порядке, в котором они указаны в строке A
Две строки P и Q.
Требуется найти выравнивание строк P и Q, максимизирующее функцию стоимости данного выравнивания.
Выравнивание двух строк это также пара строк (Q1, Q2) одинаковой длины L, состоящих из символов алфавита, и символа "-", означающего разрыв.
Стоимость выравнивания S вычисляется по формуле: S(Q1, Q2) = ∑L − 1i = 0f(Q1[i], Q2[i]),
где f(Q1[i], Q2[i]) = D, если выполнено хотя бы одно из условий
f(Q1[i], Q2[i]) = E, если выполнено хотя бы одно из условий
Иначе f(Q1[i], Q2[i]) = R[Q1[i]][Q2[i]]
Первая строка содержит целые числа D, E.
Вторая строка содержит строку-алфавит A.
Далее |A| строк содержат по |A| целых чисел — элементы матрицы R.
Последние две строки содержат строки P и Q.
В первой строке выходного файла выведите стоимость выравнивания.
В последующих двух строках выведите выравнивание.
Если оптимальных решений несколько, выведите любое из них.
|D, E| ≤ 1000
− 10 ≤ Rij ≤ 10
Длина строк не превосходит 500. Строки состоят только из символов алфавита и не могут быть пустыми.
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
|
|
2 |
|
|
3 |
|
|
4 |
|
|
Автор: | A. Klenin | Ограничение времени: | 2 сек | |
Входной файл: | input.txt | Ограничение памяти: | 256 Мб | |
Выходной файл: | output.txt | |||
Максимальный балл: | 1 |
№ | Входной файл (input.txt ) |
Выходной файл (output.txt ) |
---|---|---|
1 |
|
|
Автор: | А. Баранов | Ограничение времени: | 1 сек | |
Входной файл: | input.txt | Ограничение памяти: | 256 Мб | |
Выходной файл: | output.txt | |||
Максимальный балл: | 1 |
Пусть имеется формальный язык, слова которого представляют собой цепочки символов, составленные из отдельных неперекрывающихся подцепочек (морфов). Значения, которые способны принимать указанные морфы, образуют словарь базовых единиц (основ) исходного языка. При этом полагается, что никакие две основы не могут иметь общих префиксов.
Для заданного набора слов требуется определить список основ, разбивающих их на минимально возможное число морфов. Для каждой такой основы необходимо также посчитать, сколько раз она встречается в исходном тексте (в качестве значения какого-либо морфа).
В начале входного файла "input.txt" хранится натуральное число n. Далее следует набор из n слов, состоящих из цифр и букв латинского алфавита (регистр их написания неважен). При этом каждое слово располагается в отдельной строке.
Выходной файл "output.txt" должен содержать все найденные основы (без повторений), приведенные к одному регистру и расположенные в лексикографическом порядке. Напротив каждой такой основы (через пробел) указывается число совпадающих с ней морфов.
Полагается, что длина отдельно взятого слова лежит в диапазоне от 1 до 5000.
0 < n ≤ 105.
Размер входного файла не превосходит 10 МБ.
№ | Входной файл (input.txt ) |
Выходной файл (output.txt ) |
---|---|---|
1 |
|
|
2 |
|
|
Автор: | А. Баранов | Ограничение времени: | 1 сек | |
Входной файл: | input.txt | Ограничение памяти: | 4 Мб | |
Выходной файл: | output.txt | |||
Максимальный балл: | 1 |
Пусть имеется текстовая строка S, состоящая из цифр и букв латинского алфавита. При этом полагается, что регистр их написания неважен, т.е. заглавные и строчные символы эквивалентны между собой. На основе указанной строки требуется сформировать словарь T, в котором отдельным ее подстрокам ставятся в соответствие некоторые числовые коды. Описание вычислительной процедуры для получения таких кодов приводится ниже:
Если при попытке добавления очередной подстроки число записей в словаре превысит некоторое заданное n, словарь должен быть очищен. Счетчик k при этом обнуляется. Последний считанный символ (в окончании текущего префикса) возвращается в поток, и процедура возобновляется с той же позиции, в которой она остановилась.
В качестве ответа требуется вывести содержимое такого словаря на момент окончания входной строки.
В первой строке входного файла "input.txt" записано натуральное число n.
Далее следует строка S, для которой необходимо построить словарь.
В выходной файл "output.txt" нужно вывести все содержащиеся в словаре подстроки, приведенные к одному регистру и расположенные в лексикографическом порядке.
Напротив каждой такой строки (через пробел) следует указать ее порядковый номер.
10 ≤ n ≤ 5000, 0 < |S| ≤ 2 ⋅ 107
№ | Входной файл (input.txt ) |
Выходной файл (output.txt ) |
---|---|---|
1 |
|
|
2 |
|
|
Автор: | Талалуев Денис | Ограничение времени: | 1 сек | |
Входной файл: | Стандартный вход | Ограничение памяти: | 128 Мб | |
Выходной файл: | Стандартный выход | |||
Максимальный балл: | 1 |
Сжатое суффиксное дерево, построенное по алгоритму Укконена, в каждом своем ребре хранит информацию о символах которые там находятся, а именно (первый символ, глубина*, индекс первого символа ребра, индекс последнего символа ребра)
Требуется найти все ребра, находящееся на глубине D.
Вывод требуется выполнять по аналогии с алгоритмом поиск в глубину, то есть вывод выполняется из корня к листьям
Входной файл содержит строку длины D из которой было построено дерево и глубину l
Программа должна вывести поочередно все ребра с их параметрами. Каждое ребро записывается с новой строки, все индексы берутся из соответствующих символов в исходной строке.
Алгоритм Укконена подразумевает наличие конечного символа в строке, но в данной задаче при выводе ребер этот символ не должен встречаться
*Глубина - расстояние ребра от корня дерева (изначально равна 0).
0 ≤ S ≤ 100000
1 ≤ D ≤ 5
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
|
|
2 |
|
|
Входной файл: | input.txt | Ограничение времени: | 2 сек | |
Выходной файл: | output.txt | Ограничение памяти: | 64 Мб | |
Максимальный балл: | 1 |
По заданному тексту длины N и образцу длины K определить длину минимальной подстроки в тексте, которая удовлетворяет данному образцу. Текст состоит только из маленьких латинских букв. Образец содержит маленькие латинские буквы и символ '*', заменяющий любое множество любых символов(в том числе пустое).
В выходном файле должно находится единственное число — минимальная длина искомой подстроки, или − 1, если образец в тексте не встречается.
№ | Входной файл (input.txt ) |
Выходной файл (output.txt ) |
---|---|---|
1 |
|
|
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется написать программу, которая принимает на вход строку, определяет, является ли она записью знакового целого числа на языке Free Pascal, и если да, то каково значение этого числа.
Входные данные содержат одну строку.
Первая строка выходных данных должна содержать число:
Longint
.Longint
.Если первая строка содержит 0, во второй строке должно содержаться значение числа в десятичной записи.
Длина входной строки не более 100 символов.
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
|
|
2 |
|
|
3 |
|
|