Темы
    Информатика(2656 задач)
---> 11 задач <---
Страница: << 1 2 3 >> Отображать по:
#113343
  
Источники: [ Командные олимпиады, ВКОШП, 2015, Задача F ]
ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
256 megabytes

В одной крупной компании работает \(n\) сотрудников. Сотрудники компании пронумерованы последовательными целыми числами от 1 до \(n\) в порядке, в котором они ежедневно приходят на работу. Никакие два сотрудника не приходят на работу одновременно, таким образом, первым приходит сотрудник с номером 1, вторым приходит сотрудник с номером 2 и так далее.

Некоторые пары сотрудников являются друзьями, при этом отношение дружбы симметрично, то есть если сотрудник с номером \(i\) считает своим другом сотрудника с номером \(j\), то и сотрудник с номером \(j\) считает своим другом сотрудника с номером \(i\). Известно, что когда очередной сотрудник приходит на работу, он быстро обходит весь офис и жмёт руку всем своим друзьям, уже находящимся в офисе, то есть тем, кто пришёл раньше него. Неизвестно, какие именно пары сотрудников являются друзьями, но для каждого сотрудника известно количество рукопожатий, которое он ежедневно совершает сразу после своего прихода на работу.

Директор компании хотел бы побеседовать с кем-нибудь из сотрудников о текущем состоянии дел. Для этого он хочет выбрать наиболее социально активного человека, а именно сотрудника с максимальным количеством друзей. По имеющейся информации определите, какое максимальное количество друзей может быть у одного из сотрудников.

Входные данные

В первой строке входных данных записано единственное число \(n (1 \le n \le 200 000)\) — количество сотрудников в компании.

Во второй строке входных данных записаны \(n\) целых чисел \(h_i (0 \le h_i < i)\) — \(i\)-е число соответствует количеству рукопожатий, которое совершил сотрудник с номером \(i\) сразу после своего прихода на работу, то есть до прихода сотрудника с номером \(i + \)1.

Выходные данные

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

Замечание

В первом примере есть всего одна пара сотрудников, и они, как следует из того, что \(h_2 = 1\), являются друзьями.

Во втором примере, если все сотрудники 3, 4 и 5 здоровались с одним и тем же сотрудником, то у этого сотрудника 3 друга.

Примеры
Входные данные
2
0 1
Выходные данные
1
Входные данные
5
0 0 1 1 1
Выходные данные
3
#113344
  
Источники: [ Командные олимпиады, ВКОШП, 2015, Задача G ]
ограничение по времени на тест
5.0 second;
ограничение по памяти на тест
256 megabytes
Интерактивная

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

Программа жюри решила сыграть с вашей программой в игру. На доске \(n \times n\) в двух различных клетках находятся две фишки. Ваша программа должна определить положение фишек. Для этого она может пытаться двигать фишки, а программа жюри будет сообщать результаты передвижений.

За один ход можно выбрать фишку и попросить переместить её на одну клетку влево, вправо, вверх или вниз. Программа жюри сообщает результат перемещения — если клетка в выбранном направлении существует и свободна, то перемещение считается успешным и фишка перемещается в эту клетку. В противном случае перемещение считается неудачным и фишка остается на той же клетке.

Вы выигрываете, если после очередного хода можете назвать исходное положение фишек на доске. Ваша задача — выиграть не более чем за \(6n\) ходов. Введем на доске систему координат таким образом, что клетки имеют координаты \((1, 1),(1, 2), \dots ,(1, n),(2, 1), \dots ,(n, n)\). Команды для перемещения фишки кодируются латинскими буквами следующим образом:

  • «U» — переместиться с клетки \((x, y)\) на клетку \((x, y + 1)\).
  • «D» — переместиться с клетки \((x, y)\) на клетку \((x, y − 1)\).
  • «R» — переместиться с клетки \((x, y)\) на клетку \((x + 1, y)\).
  • «L» — переместиться с клетки \((x, y)\) на клетку \((x − 1, y)\).

Протокол взаимодействия с программой жюри

В самом начале программа жюри сообщает вашей программе натуральное число \(n (2 \le n \le 50)\) — размер доски.

Далее ваша программа должна повторять следующие ходы, выводя в стандартный поток вывода соответствующее сообщение и переводя строку. Перемещение фишки кодируется строкой «0 id c», где id — номер фишки, которую ваша программа хочет переместить (1 или 2), а символ c — направление движения. После каждого перемещения программа жюри сообщает вашей программе результат попытки перемещения:

• «1», если передвижение успешно;

• «0», если нет.

Когда ваша программа считает, что определила начальное положение фишек, следует вывести 5 чисел: «1 \(x_1 y_1 x_2 y_2\)» (\(1 \le x_1, y_1, x_2, y_2 \le n\)) — начальное положение первой фишки \((x_1, y_1)\) и второй фишки \((x_2, y_2)\), соответственно. После вывода этой команды ваша программа должна завершиться. Вывод этой команды не считается ходом и не включается в ограничение \(6n\) на число ходов.

В каждом тесте исходное положение фишек зафиксировано, и программа жюри честно отвечает на запросы вашей программы.

Замечание

После каждого действия вашей программы выводите символ перевода строки. Если вы используете «writeln» в Паскале, «cout << ... << endl» в C++, «System.out.println» в Java или «print» в Python, сброс потока вывода у вас происходит автоматически, дополнительно делать «flush» не обязательно. Если вы используете другой способ вывода, рекомендуется делать «flush», но все равно обязательно требуется выводить символ перевода строки.

Ниже приведены наиболее типичные причины получения тех или иных сообщений об ошибке.

Если ваша программа соблюдает протокол, но неверно определяет начальное положение фишек, либо выполняет слишком много ходов, вы получите результат «Wrong Answer».

Если ваша программа выводит некорректно отформатированные сообщения программе жюри, то вы получите результат «Presentation Error», либо «Wrong Answer».

Если ваша программа нарушила протокол и ждет ввода в то же время, когда его ждет и программа жюри, то вы получите результат «Idleness Limit Exceeded». Обратите внимание, что к такому же результату может привести и то, что вы не переводите строку после каждого выведенного сообщения, или выводите не тем способом, который описан в начале раздела, и не делаете «flush».

#113345
  
Источники: [ Командные олимпиады, ВКОШП, 2015, Задача H ]
ограничение по времени на тест
5.0 second;
ограничение по памяти на тест
256 megabytes

Распечатки стека вызовов функций при ошибках — мощный инструмент отладки программ. Рассмотрим математическую модель взаимодействия между функциями в программе, которая называется граф вызовов. Пусть в программе \(n\) функций, которые могут вызывать друг друга. Обозначим все функции в программе числами от 1 до \(n\). Рассмотрим множество \(E\) пар чисел (\(f_i , g_i)\), где \(f_i\) и \(g_i\) — номера функций, такие, что \(f_i\) вызывает \(g_i\) . Размер этого множества будем называть сложностью графа вызовов.

Например, рассмотрим пример программы на примитивном языке программирования, в которой есть три функции.

function f(x)
    if x > 0 then
        return g(x)
    else
        return h(x)
function g(x)
    return x
function h(x)
    if x == 0 then
        return 1 / x
    else
        return h(x + 1) + 1
Пронумеруем функции, пусть \(f\) имеет номер 1, \(g\) имеет номер 2 и \(h\) имеет номер 3. Тогда множество \(E\) выглядит следующим образом: \(E\) = {(1, 2),(1, 3),(3, 3)}, так как функция \(f\) вызывает функции \(g\) и \(h\), функция \(g\) не вызывает других функций, а функция \(h\) вызывает себя. Сложность графа вызовов этой программы равна 3.

Распечатка стека вызовов при ошибке устроена следующим образом. Пусть в процессе выполнения программы произошла некоторая ошибка. Сначала в распечатку выводится номер функции \(i_1\), в которой произошла ошибка, далее выводится номер функции \(i_2\), из которой непосредственно была вызвана эта функция \(i_1\), далее номер номер функции \(i_3\), из которой была вызвана функция \(i_2\), и так далее.

Пусть, например, в приведенном выше примере программы был выполнен вызов \(f\)(−3). Тогда будет выполнен вызов \(h\)(−3), который выполнит \(h\)(−2), а далее в свою очередь \(h\)(−1) и h(0), в последнем вызове произойдет деление на 0. Тогда распечатка стека вызовов будет выглядеть так:

\(\)3\(\) \(\)3\(\) \(\)3\(\) \(\)3\(\) \(\)1\(\) Юра попросил Лёшу найти ошибку в его программе, прислав ему распечатку стека вызовов после ошибок. К сожалению, файл, который Юра прислал Лёше, содержит несколько распечаток стеков вызовов при различных ошибках, причем эти распечатки выведены подряд и никак не отделены друг от друга. При этом Юра утверждает, что ошибки могут происходить только в двух функциях, правда он не помнит, в каких.

Лёша понял, что ограничиться распечаткой стека вызовов не удастся, придется смотреть на программу. Но прежде чем это сделать, он хочет выяснить, какая минимальная сложность может быть у графа вызовов этой программы, если все утверждения Юры верны.

Помогите ему выяснить, какая может быть минимальная сложность графа вызовов программы, чтобы присланный ему файл мог содержать одну или несколько записанных подряд без разделителей распечаток стеков вызовов, а непосредственные ошибки происходили не более чем в двух различных функциях.

Входные данные

В первой строке находятся два целых числа \(n\) и \(m\) (\(1 \le n, m \le 100 000)\) — количество функций в программе Юры и количество строк в файле с распечатками стека вызовов, которые Юра прислал Лёше. В следующих m строках находятся по одному целому числу \(f_i\) (\(1 \le f_i \le n\)) — номер функции в \(i\)-й строке файла.

Выходные данные

В первой строке выведите одно целое число \(k\) — минимальную возможную сложность графа вызовов программы Юры. В следующих \(k\) выведите по два целых числа \(a_i\) и \(b_i\) — такая пара означает, что функция с номером \(a_i\) может вызывать функцию с номером \(b_i\) . Если возможных вариантов графа вызовов несколько, выведите любой.

Пояснение к примеру

В примере возможна ситуация, что ошибки происходят только в функциях 1 и 3, а в приведенном файле содержится пять записанных подряд распечаток стеков вызовов. Ниже приведены те же распечатки, но разделенные пустой строкой. 1

3

3
2

3
2

1

В этом случае только функция 2 вызывает функцию 3, следовательно сложность графа вызовов равна 1.

Примеры
Входные данные
3 7
1
3
3
2
3
2
1
Выходные данные
1
2 3
#113346
  
Источники: [ Командные олимпиады, ВКОШП, 2015, Задача I ]
ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
256 megabytes

Феоктист работает в обменном пункте на границе Флатландии и Байтландии. Каждый день он узнает по радио текущий курс обмена Флатландских флатов на Байтландские биты и вывешивает информацию об обменном курсе на дверях своего пункта.

В распоряжении Феоктиста есть \(n\) табличек, на которых записаны числа \(c_1, c_2, \dots , c_n\). Узнав сегодняшний курс обмена \(p\), Феоктист выбирает две таблички с значениями \(c_i\) и \(c_j\) , такими, чтобы значение \(c_i/c_j\) было как можно ближе к \(p\), и вывешивает их на двери, формируя таким образом объявление «меняю \(c_i\) флатов на \(c_j\) битов». Задача не из легких, и Феоктист решил её автоматизи- ровать.

Помогите Феоктисту по заданному курсу \(p\) найти две соответствующие таблички.

Входные данные

В первой строке входного файла заданы два целых числа \(n\) и \(p\) (\(2 \le n \le 100 000, 1 \le p \le 10^9\) ) — число табличек и текущий курс. Вторая строка содержит \(n\) целых чисел \(c_i\) (\(1 \le c_i \le 10^9\) ) — числа, записанные на табличках.

Выходные данные

Выведите два целых числа \(i\) и \(j\) (\(1 \le i, j \le n, i \ne j\)) — номера двух табличек, таких что величина \(|(c_i/c_j ) − p|\) минимальна. Если таких пар несколько, то вы можно вывести любую из них.

Примеры
Входные данные
3 2
1 6 3
Выходные данные
2 3
Входные данные
4 3
2 3 4 5
Выходные данные
4 1
ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
256 megabytes

На перемене перед уроком математики Рома решил поупражняться в определении простоты числа. Напомним, что простым называется натуральное число, имеющее ровно два различных натуральных делителя — единицу и самого себя. Сначала он написал на доске первое простое число, после чего справа приписал к нему второе, затем третье и так далее. Всего Рома выписал на доску первые \(n\) простых чисел. В результате действий Ромы на доске появилось одно длинное число, которое начинается так: «23571113171923... ».

Когда в кабинет вошла Елена Евгеньевна, учительница Ромы, она предложила классу решить следующую задачку: вычеркнуть из написанного на доске числа \(k\) цифр так, чтобы оставшееся на доске число было максимальным.

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

Входные данные

Входной файл к этой задаче содержит несколько наборов тестовых данных. В первой строке входного файла задано число \(T\) — количество наборов в файле.

В следующих \(T\) строках идут описания наборов, каждое из которых состоит из двух целых положительных чисел \(n\) и \(k\). Гарантируется, что первые n простых чисел содержат в себе хотя бы \(k + 1\) цифру суммарно.

Сумма всех \(n\) во входном файле не превосходит 400 000.

Выходные данные

Для каждого из тестовых наборов в отдельной строке выведите искомое максимальное число для соответствующих \(n\) и \(k\).

Выходные данные

В первом тесте Рома выписал число 2357. Максимальное число, которое может получиться после вычеркивания из него двух цифр: 57.

Во втором тесте Рома выписал число 235711. Максимальное число, которое может получиться после вычеркивания из него трех цифр: 711.

Примеры
Входные данные
2
4 2
5 3
Выходные данные
57
711

Страница: << 1 2 3 >> Отображать по:
Выбрано
:
Отменить
|
Добавить в контест