Турнир Архимеда(52 задач)
Кировские командные турниры(8 задач)
Барнаульские командные турниры(10 задач)
Московская командная олимпиада(246 задач)
Командные чемпионаты школьников Санкт-Петербурга по программированию(167 задач)
ВКОШП(180 задач)
Суровая зима в Санкт-Барнаурге длится \(n\) дней. Таня очень любит кататься на лыжах и часто выезжает на близлежащий горнолыжный курорт в Тбиатыкенте. Так, про некоторые дни последней зимы Таня помнит, что была в этот день на горнолыжном курорте — ведь она выкладывала своё фото со склона в тот день в социальной сети SkiForces. Про другие дни никакой информации нет.
Известно, что Таня всегда ездит на курорт одинаково: она выезжает утром некоторого дня, про- водит на курорте ровно \(k\) дней и возвращается вечером \(k\)-го дня поездки. При этом могло оказаться, что Таня снова поехала на курорт на следующий день после окончания предыдущей поездки. Те, дни, когда Таня не ездила на горнолыжный курорт, она провела в городе.
Зима закончилась, и подруги говорят Тане, что она слишком много катается на лыжах. Чтобы понять, так ли это, Таня хочет выяснить, каким могло быть максимальное количество зимних дней, которые провела в городе.
Таня могла первый раз поехать на курорт до начала зимы и могла закончить последнюю поездку после окончания зимы.
В первой строке находятся три целых положительных числа \(n, \ k\) и \(m\) — продолжительность зимы в днях, длительность одной поездки на горнолыжный курорт в днях и количество дней, в которые Таня точно была на курорте (\(1 \le k \le n \le 10^9 , 1 \le m \le 2 \cdot 10^5 , m \le n\)).
Во второй строке находятся \(m\) чисел \(d_1, \ d_2, \dots , d_m\) — номера дней в которые Таня точно была на курорте (\(1 \le d_i \le n\)). Каждый день перечислен не более одного раза.
Выведите единственное целое число — максимальное количество зимних дней, в которые Таня не была на горнолыжном курорте.
В первом примере Таня могла быть на курорте два раза: первый раз начиная за день до зимы и заканчивая в 1-й день зимы; второй раз начиная в последний день зимы и заканчивая в 1-й день после зимы.
Таким образом, Таня могла провести в городе второй и третий дни зимы.
Во втором примере Таня могла быть на курорте один раз, например, начиная со второго дня зимы и заканчивая пятым днём зимы. Таким образом, Таня могла провести в городе три дня — в первый, в шестой и в седьмой дни зимы.
4 2 2 1 4
2
7 4 3 4 3 5
3
5 1 5 5 4 3 2 1
0
13 3 6 3 5 6 8 9 11
4
Лёша готовит своего робота к тестированию IQ. В 2116 году тестирование IQ для роботов проходит следующим образом. Роботу демонстрируется прямоугольная таблица, содержащая \(n\) строк и \(m\) столбцов, каждая клетка которой покрашена в какой-либо цвет.
Затем экзаменатор \(q\) раз просит робота выполнить следующее задание. Экзаменатор указывает на некоторую клетку в таблице, а робот в качестве ответа должен выбрать две другие клетки. При этом должны выполняться следующие условия.
Лёша хочет научить своего робота справляться с заданием как можно лучше. Помогите ему запрограммировать робота.
В первой строке находятся целые числа \(n\) и \(m\) — количество строк и столбцов в таблице, соответственно (\(2 \le n, m \le 500 000; n \times m \le 10^6\) ).
Следующие \(n\) строк содержат по \(m\) строчных латинских букв — описание таблицы, \(j\)-й символ \(i\)-й из этих строк задает цвет клетки (\(i, \ j\)). Одинаковые буквы обозначают одинаковый цвет, а разные — разный.
В следующей строке находится число \(q\) — количество вопросов экзаменатора (\(1 \le q \le 200 000\)).
Следующие \(q\) строк содержат описание вопросов. В \(i\)-й из этих строк находятся два числа \(x_i\) и \(y_i\) — номер строки и столбца, на пересечении которых находится клетка, для которой требуется найти ответ (\(1 \le x_i \le n, 1 \le y_i \le m\)).
Для каждого вопроса выведите ответ в отдельной строке. Если невозможно найти пару клеток, удовлетворяющих всем условиям, выведите -1. Иначе выведите четыре числа \(r_1, \ c_1, \ r_2, \ c_2\) — описание двух выбранных клеток. Если оптимальных ответов несколько, выведите любой.
3 4 abbb baab babb 4 1 1 1 4 3 1 3 4
-1 1 1 2 4 3 2 2 1 2 4 3 2
Ученые работают на раскопках окаменелых останков древних существ на планете соседней звездной системы. В процессе исследования ученые пытаются понять, как именно цепочки ДНК различных существ составлялись из генов.
Цепочки ДНК всех исследуемых существ представляют собой последовательности нуклеотидов. Каждый нуклеотид обозначается строчной буквой латинского алфавита. Таким образом, цепочка ДНК представляет собой строку, составленную из строчных букв латинского алфавита.
Ген также представляет собой строку из строчных букв латинского алфавита. Известно, что в любом корректном наборе генов никакая строка не является префиксом другой строки.
Будем говорить, что цепочку ДНК \(d\) можно расшифровать с использованием набора генов \(G\), если d можно представить как результат последовательной записи одного или нескольких генов: \(d \ = \ g_1g_2 \dots g_k\), где \(g_i\) — гены из набора \(G\). Один и тот же ген может входить в расшифровку ДНК несколько раз.
Для обработки информации ученым требуется разработать компьютерную систему, которая будет поддерживать корректный набор генов \(G\) и массив цепочек ДНК существ \(D\). По мере анализа останков, ученые могут добавлять новый ген в набор \(G\) или добавлять новую цепочку ДНК в массив \(D\). Гарантируется, что ни в какой момент времени не существует двух генов, один из которых является префиксом другого.
После каждой операции ученые хотят знать, какие цепочки ДНК в массиве \(D\) можно расшифровать, используя текущий набор генов \(G\). После \(i\)-й операции система должна сообщать \(k_i\) — количество цепочек ДНК, находящихся в массиве \(D\), которые впервые стало можно расшифровать после \(i\)-й операции, а затем \(k_i\) чисел — номера этих цепочек. Результат очередной операции должен быть получен до того, как станет известна следующая операция.
Помогите ученым разработать такую систему.
В первой строке находится число \(n\) — количество операций, которые необходимо выполнить (\(1 \le n \le 100 000\)).
В следующих \(n\) строках находятся описания операций, \(i\)-я строка начинается с символа «+», если эта операция — добавление нового гена в набор \(G\), или с символа «?», если эта операция — добавление цепочки ДНК в конец массива \(D\). Далее через пробел находится строка \(x_i\) , состоящая из строчных латинских букв, которую необходимо использовать, чтобы получить строку \(s_i\) , которая задает добавляемый в этой операции ген или цепочку ДНК.
Для получения строки \(s_i\) из строки \(x_i\) , необходимо выполнить следующие действия. Если \(i \ = \ 1\), то \(s_i \ = \ x_i\) . Иначе пусть число впервые расшифрованных цепочек ДНК после предыдущей операции равно \(k_{i−1}\). Выполним \(k_{i−1}\) раз следующее действие: перенесем первый символ \(x_i\) в конец. Иначе говоря, выполним циклический сдвиг строки \(x_i\) влево на \(k_{i−1}\). Получившаяся строка равна \(s_i\) — ген или цепочка ДНК, которую необходимо добавить на \(i\)-й операции.
Все строки не пусты, суммарный размер строк во всех операциях не превышает \(10^6\)> .
Гарантируется, что ни в какой момент времени не существует двух генов, один из которых является префиксом другого.
Выведите \(n\) строк.
В \(i\)-й строке выведите сначала число \(k_i\) — количество цепочек ДНК, находящихся в массиве \(D\), которые впервые стало можно расшифровать после \(i\)-й операции, а затем \(k_i\) чисел — номера этих цепочек. Цепочки нумеруются с единицы в порядке добавления в массив \(D\). Номера цепочек в одной строке можно выводить в любом порядке.
В первых трех операциях \(s_1, s_2 \ и \ s_3\) совпадают с соответствующими строками во вводе. Поскольку \(k_3 \ = \ 1\), то для четвертой операции \(s_4\) получается из строки \(x_4\) = «dabdab» циклическим сдвигом влево на 1, таким образом, в четвертой операции в массив \(D\) добавляется строка \(s_4 \ = \ «abdabd»\). Наконец, \(k_4 \ = \ 0\), поэтому \(s_5 \ = \ x_5\).
5 ? abcabd + abc ? abcabc ? dabdab + abd
0 0 1 2 0 2 1 3
Ваня занимается работой с большими данными. Его проект занимается обработкой гигантских таблиц статистических данных. Ваня отвечает за разработку модуля преобразования таблиц, который выполняет перестановку строк, столбцов и ячеек таблицы.
Модуль занимается обработкой таблицы, состоящей из \(h\) строк и \(w\) столбцов, строки пронумерованы сверху вниз от \(0\) до \(h−1\), столбцы пронумерованы слева направо от \(0\) до \(w −1\). Ячейка в \(i\)-й строке, \(j\)-м столбце таблицы обозначается как \([i, j]\). Исходно ячейка \([i, j]\) содержит число \(i \times w + j\). На рис. 1. приведен пример исходного заполнения таблицы для \(h = 3,\ w = 5\).
Помогите Ване выполнить все операции и вычислить контрольную сумму таблицы, которая получится в итоге.
Поскольку входные данные для этой задачи слишком велики, чтобы задавать их непосредственно, для ввода вам потребуется процедура расширения массива. Эта процедура не имеет специфических особенностей, которые надо использовать в решении задачи, предполагаемое жюри решение этой задачи в явном виде генерирует все массивы и далее работает с ними так же, как если бы оно считало их из входных данных.
Опишем процедуру генерации массива длины \(n\) по массиву длины \(2 \le k \le n\). Пусть задан массив целых неотрицательных чисел \(A\) = (\(a[1]\), \(a[2]\), \(\dots\), \(a[k]\)).
Массив целых чисел \(Ax \ = \ (ax[1], \ ax[2], \dots, \ ax[n])\) будем называть расширением массива \(A\) по модулю \(r\) до размера \(n\), если его элементы вычисляются по следующим формулам.
Например, выполним расширение массива \(A\) = (1, 4, 3) до 5 элементов по модулю 13
\(ax[1] \ = \ a[1] \ = \ 1\).
\(ax[2] \ = \ a[2] \ = \ 4.\)
\(ax[3] \ = \ a[3] \ = \ 3.\)
\(ax[4] \ = \ (10007 \times ax[2] + 10009 \times ax[3] + 87277) \ mod \ 13 = 157332 \ mod \ 13 = 6.\)
\(ax[5] \ = \ (10007 \times ax[3] + 10009 \times ax[4] + 87277) \ mod \ 13 = 177352 \ mod \ 13 = 6.\)
Таким образом, \(Ax \ = \ (1, 4, 3, 6, 6)\).
Первая строка ввода содержит числа \(h\), \(w\), \(n\) — размеры таблицы и число преобразований, которые необходимо выполнить (\(1 \le h, w \le 5 000,\) \(2 \le n \le 10^6\) ).
Вторая строка содержит строку \(s\) длины \(n\) — последовательность типов преобразований, \(s[i]\) = «c» задает операцию обмена столбцов, \(s[i]\) = «r» — операцию обмена строк, \(s[i]\) = «f» — операцию обмена ячеек.
Следующие четыре строки задают массивы \(A\), \(B\), \(C\), \(D\), соответственно. Каждый массив задается числом \(k, 2 \le k \le n, k \le 1000\), после чего следует \(k\) чисел — элементы массива. Элементы массивов \(A\) и \(C\) удовлетворяют ограничению \(0 \le a[i], c[i] \le h − 1\), элементы массивов \(B\) и \(D\) удовлетворяют ограничению \(0 \le b[i], d[i] \le w − 1\).
Пусть \(Ax\) является расширением массива \(A\) по модулю \(h\) до размера \(n\), массив \(Bx\) является расширением массива \(B\) по модулю \(w\) до размера \(n\), массив \(Cx\) является расширением массива \(C\) по модулю \(h\) до размера \(n\) и массив \(Dx\) является расширением массива \(D\) по модулю \(w\) до размера n.
Операции, которые требуется выполнить с таблицей, определяются следующим образом: тип \(i\)-й операции задается символом \(s[i]\), а параметры получаются из массивов \(Ax\), \(Bx\), \(C\)x, \(Dx\).
Выведите одно число — контрольную сумму таблицы после выполнения всех преобразований.
3 5 3 crf 3 0 0 0 3 0 0 1 3 0 1 1 3 1 0 2
564830737
Это интерактивная задача.
В Далёкой-Далёкой Галактике \(10^{18}\) планет, и все они пронумерованы натуральными числами от 1 до \(10^{18}\) .
В Архивах джедаев были сохранены сведения о всех планетах Галактики: по кругу в огромном зале были расположены ячейки, пронумерованные против часовой стрелки от 1 до \(10^{18}\). Исходно Архивы были устроены очень просто: в ячейке с номером \(i\) хранились сведения о планете с номером \(i\). Поэтому, зная лишь номер планеты, всегда можно было легко найти информацию о ней.
Вот и Оби-Вану Кеноби понадобилось узнать координаты планеты Камино, которая имеет номер \(x\). Однако, заглянув в Архивы, он с удивлением обнаружил, что кто-то удалил из Архивов m ячеек со сведениями о некоторых планетах. Кроме того, оставшиеся ячейки были заново пронумерованы, начиная с 1, против часовой стрелки (возможно, начиная не с той, с которой они нумеровались исходно), и теперь в ячейке с номером \(i\) могут храниться сведения о совсем другой планете.
Оби-Ван в затруднении. Ему нужно срочно найти данные о планете Камино. Оби-Ван может проверить содержимое ячейки и узнать, данные о какой планете в ней находятся. У Оби-Вана мало времени, поэтому он может проверить содержимое не более чем десяти ячеек.
Помогите ему выяснить, в какой ячейке находятся данные о планете Камино, если, конечно, они не были удалены из Архивов.
Сначала вашей программе подаётся на вход в отдельной строке два числа: \(x\) — номер планеты Камино (\(1 \le x \le 10^{18}\)) и \(m\) — число удаленных из Архивов ячеек (\(0 \le m \le 500\)).
После этого ваша программа может делать запросы: «посмотреть, сведения о какой планете записаны в ячейке номер v». Для этого нужно вывести в выходной поток на отдельной строке «? v» (\(1 \le v \le 10^{18} − m\)). В ответ на запрос во входном потоке на отдельной строке будет записано одно число — номер планеты, сведения о которой записаны в ячейке \(v\). Вы можете сделать не более десяти таких запросов, иначе ваша программа получит вердикт «Wrong answer».
В конце вы должны вывести в выходной поток «! a», где \(a\) — это номер ячейки, в которой записаны сведения о планете Камино. Если данные о планете Камино были удалены из Архива, то следует вместо номера ячейки вывести −1, таким образом последнее сообщение должно быть «! -1».
После каждого действия вашей программы выводите символ перевода строки. Если вы используете «writeln» в Паскале, «cout << ... << endl» в C++, «System.out.println» в Java или «print» в Python, сброс потока вывода у вас происходит автоматически, дополнительно делать «flush» не обязательно. Если вы используете другой способ вывода, рекомендуется делать «flush», но все равно обязательно требуется выводить символ перевода строки.
Ниже приведены наиболее типичные причины получения тех или иных сообщений об ошибке.
Если ваша программа соблюдает протокол, но неверно определяет искомый номер ячейки либо выполняет слишком много запросов, вы получите результат «Wrong Answer».
Если ваша программа выводит некорректно отформатированные сообщения программе жюри, то вы получите результат «Presentation Error» либо «Wrong Answer».
Если ваша программа нарушила протокол и ждет ввода в то же время, когда его ждет и программа жюри, то вы получите результат «Idleness Limit Exceeded». Обратите внимание, что к такому же результату может привести и то, что вы не переводите строку после каждого выведенного сообщения или выводите не тем способом, который описан в начале раздела, и не делаете «flush».
При входных данных:
16 3 10 12 13 16выход будет следующим:
? 1 ? 2 ? 3 ? 4 ! 4В примере из Архива были удалены данные о планетах с номерами 11, 14 и 15, а ячейки были перенумерованы, начиная с ячейки, содержащей сведения о планете с номером 10.