2010(8 задач)
2011(8 задач)
2012(8 задач)
2013(8 задач)
2014(8 задач)
2015(8 задач)
2016(8 задач)
2017(8 задач)
Московская областная олимпиада(13 задач)
Кировская открытая областная олимпиада(21 задач)
Санкт-Петербург(3 задач)
Рассмотрим строку \(s\), состоящую из строчных букв латинского алфавита. Примером такой строки является, например, строка «abba».
Подстрокой строки \(s\) называется строка, составленная из одного или нескольких подряд идущих символов строки \(s\). Обозначим как \(W(s)\) множество, состоящее из всех возможных подстрок строки \(s\). При этом каждая подстрока входит в это множество не более одного раза, даже если она встречается в строке \(s\) несколько раз.
Например, \(W\)(«abba») = {«a», «b», «ab», «ba», «bb», «abb», «bba», «abba»}.
Подпоследовательностью строки \(s\) называется строка, которую можно получить из \(s\) удалением произвольного числа символов. Обозначим как \(Y\)(\(s\)) множество, состоящее из всех возможных подпоследовательностей строки \(s\). Аналогично \(W\)(\(s\)), каждая подпоследовательность строки \(s\) включается в \(Y\)(\(s\)) ровно один раз, даже если она может быть получена несколькими способами удаления символов из строки \(s\). Поскольку любая подстрока строки \(s\) является также ее подпоследовательностью, то множество \(Y\)(\(s\)) включает в себя \(W\)(\(s\)), но может содержать также и другие строки.
Например, \(Y\)(«abba») = \(W\)(«abba») ∪ {«aa», «aba»}. Знак ∪ обозначает объединение множеств.
Будем называть строку \(s\) странной, если для нее \(W\)(\(s\)) = \(Y\)(\(s\)). Так, строка «abba» не является странной, а, например, строка «abb» является, так как для нее \(W\)(«abb») = \(Y\)(«abb») = {«a», «b», «ab», «bb», «abb»}.
Будем называть странностью строки число ее различных странных подстрок. При вычислении странности подстрока считается один раз, даже если она встречается в строке \(s\) в качестве подстроки несколько раз. Так, для строки «abba» ее странность равна 7, любая ее подстрока, кроме всей строки, является странной.
Требуется написать программу, которая по заданной строке \(s\) определяет ее странность.
Входной файл содержит строку \(s\), состоящую из строчных букв латинского алфавита. Строка имеет длину от 1 до 200 000.
Выходной файл должен содержать одно целое число: странность заданной во входном файле строки.
В этой задаче четыре подзадачи. Баллы за каждую подзадачу начисляются только в случае, если все тесты для данной подзадачи успешно пройдены.
Строка \(s\) состоит только из букв «a» и «b». Длина строки \(s\) не превышает 50.
Длина строки \(s\) не превышает 50.
Длина строки \(s\) не превышает 1000.
Длина строки \(s\) не превышает 200 000.
abba
7
Железная дорога Флатландии представляет собой прямую, вдоль которой расположены \(n\) станций. Будем называть участок железной дороги от некоторой станции до следующей перегоном.
Поезд следует от станции 1 до станции \(n\), делая остановку на каждой станции. В поезде \(k\) мест, пронумерованных от 1 до \(k\). На поезд продаются билеты, каждый билет характеризуется тремя числами: \(s\), \(t\) и \(a\). Такой билет позволяет проехать от станции \(s\) до станции \(t\) на месте \(a\).
Вася планирует в один из дней летних каникул проехать на поезде от одной станции до другой. Он выяснил, что на поезд в этот день уже продано \(m\) билетов, и возможно уже нет мест, свободных на всех перегонах между интересующими его станциями. Билет от одной станции до другой на определенное место можно купить, только если это место свободно на всех перегонах между этими станциями.
Вася сообразил, что иногда все равно можно проехать от одной станции до другой, купив несколько билетов и пересаживаясь с одного места на другое на некоторых промежуточных станциях. Разумеется, пересаживаться с места на место неудобно, поэтому Вася хочет купить минимальное количество билетов, чтобы на каждом перегоне у него было свое место.
Вася еще не решил, от какой станции и до какой он поедет. Он записал q вариантов поездки, и для каждого из них хочет узнать, какое минимальное число билетов ему придется купить, если он выберет этот вариант.
Требуется написать программу, которая по заданному описанию уже проданных билетов и вариантов поездки Васи определяет для каждого варианта, какое минимальное количество билетов необходимо купить, чтобы совершить такую поездку.
Первая строка входного файла содержит числа \(n\), \(m\) и \(k\) (\(2 \le n \le 200 000, 0 \le m \le 200 000, 1 \le k \le 200 000\)) – количество станций, количество уже проданных билетов и количество мест в поезде. Последующие \(m\) строк содержат информацию о проданных билетах. Каждая строка содержит три числа: \(s_i\) , \(t_i\) и \(a_i\) – номер станции, от которой куплен билет, номер станции, до которой куплен билет, и номер места, на которое куплен билет (\(1 \le s_i < t_i \le n, 1 \le a_i \le k\)). Гарантируется, что все билеты куплены таким образом, что ни на каком перегоне ни на какое место нет более одного билета.
Далее идет строка, которая содержит число \(q\) (\(1 \le q \le 200 000\)). Последующие \(q\) строк содержат описания вариантов поездки. Каждая строка содержат два числа: \(f_j\) , \(d_j\) – номер станции, от которой Вася хочет поехать в этом варианте, и номер станции, до которой он хочет поехать (\(1 \le f_j < d_j \le n\)).
Выходной файл должен содержать \(q\) чисел: для каждого варианта поездки требуется вывести минимальное количество билетов, которое необходимо купить Васе, чтобы совершить соответствующую поездку. Если поездку совершить невозможно, то для этого варианта требуется вывести –1.
На перегоне от 2-й до 3-й станции все места заняты, поэтому проехать от 1-й до 5-й станции невозможно. От 3-й до 5-й станции можно проехать, используя два билета: от 3-й до 4-й станции на место 2 и от 4-й до 5-й на место 1. От 4-й до 5-й станции можно проехать, используя один билет на место 1.
В этой задаче три подзадачи. Баллы за каждую подзадачу начисляются только в случае, если все тесты этой подзадачи успешно пройдены
\(n \le 100, m \le 100, k \le 100, q = 1\)
\(n \le 200000, m \le 200000, k \le 200000, q = 1\)
\(n \le 200000, m \le 200000, k \le 200000, q \le 200000\)
5 4 3 1 4 1 2 5 3 2 3 2 4 5 2 3 1 5 3 5 4 5
-1 2 1
Во владениях короля Флатландии находится прямая дорога длиной \(n\) километров, по одну сторону от которой расположен огромный лесной массив. Король Флатландии проникся идеями защиты природы и решил превратить свой лесной массив в заповедник. Но сыновья стали сопротивляться: ведь им хотелось получить эти земли в наследство.
У короля три сына: младший, средний и старший. Король решил, что в заповедник не войдут участки лесного массива, которые он оставит сыновьям в наследство. При составлении завещания король хочет, чтобы для участков выполнялись следующие условия:
Входной файл содержит одно целое число \(n\) (\(6 \le n \le 10^9\) ).
Выходной файл должен содержать три целых положительных числа, разделенных пробелами: \(a\), \(b\) и \(c\) – длины сторон участков, которые следует выделить младшему, среднему и старшему сыну, соответственно. Если оптимальных решений несколько, разрешается вывести любое.
В этой задаче четыре подзадачи. Баллы за подзадачу начисляются только в случае, если все тесты для данной подзадачи пройдены.
\(n \le 50\)
\(n \le 2000\)
\(n \le 40000\)
\(n \le 10^9\)
6
1 2 3
Андрей работает судьей на чемпионате по гипершашкам. В каждой игре в гипершашки участвует три игрока. По ходу игры каждый из игроков набирает некоторое положительное целое число баллов. Если после окончания игры первый игрок набрал \(a\) баллов, второй — \(b\), а третий \(c\), то говорят, что игра закончилась со счетом \(a:b:c\).
Андрей знает, что правила игры гипершашек устроены таким образом, что в результате игры баллы любых двух игроков различаются не более чем в \(k\) раз.
После матча Андрей показывает его результат, размещая три карточки с очками игроков на специальном табло. Для этого у него есть набор из n карточек, на которых написаны числа \(x_1, x_2, …, x_n\). Чтобы выяснить, насколько он готов к чемпионату, Андрей хочет понять, сколько различных вариантов счета он сможет показать на табло, используя имеющиеся карточки.
Требуется написать программу, которая по числу \(k\) и значениям чисел на карточках, которые имеются у Андрея, определяет количество различных вариантов счета, которые Андрей может показать на табло.
Первая строка входного файла содержит два целых числа: \(n\) и \(k (3 \le n \le 100 000, 1 \le k \le 10^9\) ).
Вторая строка входного файла содержит \(n\) целых чисел \(x_1, x_2, …, x_n (1 \le x_i \le 10^9 )\).
Выходной файл должен содержать одно целое число — искомое количество различных вариантов счета.
В приведенном примере Андрей сможет показать следующие варианты счета: 1:1:2, 1:2:1, 2:1:1, 1:2:2, 2:1:2, 2:2:1, 2:2:3, 2:3:2, 3:2:2. Другие тройки чисел, которые можно составить с использованием имеющихся карточек, не удовлетворяют заданному условию, что баллы любых двух игроков различаются не более чем в \(k\) = 2 раза.
В этой задаче четыре подзадачи. Баллы за подзадачу начисляются только в случае, если все тесты для данной подзадачи пройдены.
\(3 \le n \le 100 000, k = 1, 1 \le x_i \le 100 000\)
\(3 \le n \le 100, k \le 100, 1 \le x_i \le 100\)
\(3 \le n \le 100 000, k \le 10^9 \le x_i \le 10^9\), все \(x_i\) различны
\(3 \le n \le 100 000, k \le 10^9 \le x_i \le 10^9\)
5 2 1 1 2 2 3
9
Софья считает число интересным, если его цифры идут в неубывающем порядке. Например, числа 123, 1111 или 888999 – интересные.
Софья заинтересовалась, сколько существует интересных положительных чисел, лежащих в диапазоне от \(L\) до \(R\) включительно. Это число может оказаться довольно большим для больших \(L\) и \(R\), поэтому Софья хочет найти остаток от деления этого числа на \(10^9\) + 7.
Требуется написать программу, которая по заданным \(L\) и \(R\) определяет количество интересных чисел, лежащих в диапазоне от \(L\) до \(R\) включительно, и выводит остаток от деления этого числа на \(10^9\) + 7.
Входной файл содержит две строки. Первая строка содержит число \(L\), вторая строка содержит число \(R\) (\(1 \le L \le R \le 10^{100}\)).
Выходной файл должен одно целое число – остаток от деления количества интересных чисел, лежащих в диапазоне от \(L\) до \(R\) включительно, на \(10^9\) + 7.
\(L = 1, R \le 1000\) Баллы за подзадачу начисляются только в случае, если все тесты подзадачи пройдены.
\(1 \le L \le R \le 10^{18}\)
В этой подзадаче 11 тестов, каждый тест оценивается в 2 балла. Баллы за каждый тест начисляются независимо.
\(L = 1, R = 10^k\) для некоторого целого \(k\), \(2 \le k \le 100\).
В этой подзадаче 8 тестов, каждый тест оценивается в 3 балла. Баллы за каждый тест начисляются независимо.
\(1 \le L \le R \le 10^{100}\)
В этой подзадаче 11 тестов, каждый тест оценивается в 3 балла. Баллы за каждый тест начисляются независимо.
1 100
54