Информатика

15 732 задачивместе с подтемами
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.

В самом лучшем университете России есть специальный предмет, который называется <<Теория Лени>>. Вы очень любите этот предмет и стараетесь постоянно использовать то, чему вас там научили.

Но, как и везде, на нём есть устный экзамен. Всего есть \(n\) билетов, из которых вы выучили ровно \(a\) (ваша лень не позволяет вам выучить больше).

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

Вы знаете, что до вас отвечали уже \(b\) человек, а это значит, что стопка содержит уже на \(b\) билетов меньше. Так как вас интересует не только <<Теория Лени>>, но и математика (и даже чуть-чуть информатика!), вы хотите узнать, какое минимальное и максимальное количество билетов из оставшихся вы можете знать.

Формат входных данных
Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^9\)) — количество билетов на экзамене.

Вторая строка содержит одно целое число \(a\) (\(1 \leq a \leq n\)) — количество билетов, которые вы выучили.

Третья строка содержит одно целое число \(b\) (\(0 \leq b < n\)) — количество людей, которые уже взяли свой билет до вас.

Формат выходных данных
Вывод вашей программы должен состоять из двух строк.

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

Вторая строка должна содержать единственное целое число — максимальное количество билетов, которое вы можете знать из оставшихся.

 

В первом примере давайте считать, что вы знаете билеты с номерами \(1, 2, 3, 4\). Тогда, если люди до вас вытянули билеты с номерами \(1, 2, 3\), то остался только \(1\) билет, который вы знаете. А если люди до вас вытянули билеты с номерами \(4, 5, 6\), то вы знаете \(3\) билета из оставшихся.

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

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

Братья делают ходы по очереди, Петя ходит первым. Своим ходом игрок находит веревочку, являющуюся стороной некоторой целой единичной квадратной ячейки сети (все четыре образующие ее веревочки целы), и перерезает выбранную веревочку. Проигрывает тот из братьев, который не может сделать очередной ход.Требуется написать программу, которая по описанию куска сети на столе определяет, может ли Петя выиграть при любой игре Васи, и если да, то какой первый ход он должен для этого сделать.

Формат входных данных
В первой строке входных данных задается число N (1 ≤ N ≤ 50) — количество веревочек единичной длины, из которых состоит кусок сети. Следующие N строк содержат по две пары целых чисел — координаты концов веревочек. Каждая четверка чисел описывает отрезок единичной длины, параллельный одной из осей координат.

Координаты всех точек неотрицательны и не превосходят 50.

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

Примечание

В примере во второй строке выведено два числа. Это сделано для иллюстрации того, какие именно веревочки можно разрезать. Вам требуется вывести любую одну из них.
Пете поручили написать менеджер памяти для новой стандартной библиотеки языка H++. В распоряжении у менеджера находится массив из N последовательных ячеек памяти, пронумерованных от 1 до N. Задача менеджера — обрабатывать запросы приложений на выделение и освобождение памяти.

Запрос на выделение памяти имеет один параметр K. Такой запрос означает, что приложение просит выделить ему K последовательных ячеек памяти. Если в распоряжении менеджера есть хотя бы один свободный блок из K последовательных ячеек, то он обязан в ответ на запрос выделить такой блок. При этом непосредственно перед самой первой ячейкой памяти выделяемого блока не должно располагаться свободной ячейки памяти. После этого выделенные ячейки становятся занятыми и не могут быть использованы для выделения памяти, пока не будут освобождены. Если блока из K последовательных свободных ячеек нет, то запрос отклоняется.

Запрос на освобождение памяти имеет один параметр T. Такой запрос означает, что менеджер должен освободить память, выделенную ранее при обработке запроса с порядковым номером T. Запросы нумеруются, начиная с единицы. Гарантируется, что запрос с номером T — запрос на выделение, причем к нему еще не применялось освобождение памяти. Освобожденные ячейки могут снова быть использованы для выделения памяти. Если запрос с номером T был отклонен, то текущий запрос на освобождение памяти игнорируется.

Требуется написать менеджер памяти, удовлетворяющий приведенным критериям.

Формат входных данных
В первой строке входных данных задаются числа N и M — количество ячеек памяти и количество запросов, соответственно (1 ≤ N ≤ 231 – 1; 1 ≤ M ≤ 105). Каждая из следующих M строк содержит по одному числу: (i+1)-я строка входных данных (1 ≤ iM) содержит либо положительное число K, если i-й запрос — запрос на выделение с параметром K (1 ≤ KN), либо отрицательное число – T, если i-й запрос — запрос на освобождение с параметром T (1 ≤ T < i).

Формат выходных данных
Для каждого запроса на выделение памяти выведите результат обработки этого запроса: для успешных запросов выведите номер первой ячейки памяти в выделенном блоке, для отклоненных запросов выведите число -1. Результаты нужно выводить в порядке следования запросов во входных данных.
✓ 13✗ 17600лёгкаяВойти и решать
Вычислите a+b.

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

Единственная строка входных данных содержит два натуральных числа через пробел. Значения чисел не превышают 109.

Выходные данные
Выведите на экран результат выражения a+b.
 
 
Петя и Ваня решили придумать свои правила для игры Дартс. Они взяли круглое игровое поле и поделили его на сектора. Сектора нумеруются натуральными числами. Каждому сектору назначили количество очков, которое можно получить, если попасть дротиком в него. Перед началом игры выбирается нулевой сектор, который служит точкой отсчета: количество очков, которое набирает игрок, попадая в сектор, считается как количество очков, указанное в секторе, умноженное на расстояние (количество секторов) от нулевого сектора. При попадании в нулевой сектор количество очков равно нулю.

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

Описание входных данных
Первое число N — количество секторов, на которые разделено игровое поле.
Последующие N чисел — количество очков, которые набирают игроки, попадая в соответствующий сектор, начиная с сектора с номером 1.

Описание выходных данных
Одно число — номер сектора, который необходимо выбрать как нулевой.

Пример организации входных данных
6
8
20
5
13
7
19
Для данного примера ответ — 3 (5 * 0 + 20 * 1 + 13 * 1 + 8 * 2 + 7 * 2 + 19 * 3 = 120)


В ответе укажите два числа через пробел - сначала ответ для файла apr24-27_A, затем ответ для файла apr24-27_B.

На оптовом складе имеется N упаковочных коробок (все коробки имеют форму куба). Менеджеру по закупкам отдела упаковки подарков необходимо купить как можно больше коробок.  Так как в его машине свободно только одно грузовое место, ему необходимо упаковать коробки таким образом, чтобы их можно было сложить одну в другую. Одну коробку можно сложить в другую, если ее сторона хотя бы на 3 единицы меньше стороны другой коробки.
Определите наибольшее количество коробок, которое сможет купить менеджер, а также максимально возможную длину стороны самой маленькой коробки, которую сможет купить менеджер


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

В первой строке входного файла находится число N – количество коробок на складе (натуральное число, не превышающее 10 000). В следующих N строках находятся значения длин стороны коробки  (все числа натуральные, не превышающие 10 000), каждое – в отдельной строке. 

Запишите в ответе два целых числа: сначала наибольшее количество коробок, которое менеджер сможет купить, затем – максимально возможную длину стороны самой маленькой коробки, которую сможет купить менеджер.

Типовой пример организации данных во входном файле

5
43
40
32
40
30

Пример входного файла приведён для пяти коробок. При таких исходных данных условию задачи удовлетворяют коробки  со сторонами 30, 40 и 43 или 32, 40 и 43 соответственно, т.е. количество коробок равно 3, а максимально возможная сторона самой маленькой коробки  равна 32.

Типовой пример имеет иллюстративный характер. Для выполнения задания используйте данные из прилагаемых файлов.

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Например, маске 123*4?5 соответствуют числа 123405 и 12300405.

Среди натуральных чисел, не превышающих 1010, найдите все числа, соответствующие маске  2??7*2007, делящиеся на 2007 без остатка.

В ответе запишите все найденные числа и через пробел соответствующие им результаты деления этих чисел на 2007. Числа должны быть записаны в порядке возрастания. В одной строке записывается одна пара чисел - само число и результат его деления на 2007

 

Текстовый файл состоит из заглавных букв латинского алфавита A, E, N, P и цифр 1, 2, 3, 4.

Определите в прилагаемом файле максимальное количество идущих подряд символов, среди которых ни одна гласная буква (гласные - A, E) не стоит рядом с четной цифрой.

Для выполнения этого задания следует написать программу.

Исполнитель преобразует число, записанное на экране. У исполнителя есть три команды, которые обозначены латинскими буквами:

A. Прибавить 1
B. Прибавить 3
C. Умножить на 2

Программа для исполнителя – это последовательность команд.

Сколько существует программ, которые преобразуют исходное число 7 в число 57, и при этом траектория вычислений программы содержит числа 27 и 30? Траектория должна содержать оба указанных числа.
Траектория вычислений программы – это последовательность результатов выполнения всех команд программы.
Например, для программы ACB при исходном числе 7 траектория будет состоять из чисел 8, 16, 18.

В файле содержится информация о совокупности N вычислительных процессов, которые могут выполняться параллельно или последовательно. Будем говорить, что процесс B зависит от процесса A, если для выполнения процесса B необходимы результаты выполнения процесса A. В этом случае процессы могут выполняться только последовательно. Информация о процессах представлена в файле в виде таблицы. В первом столбце таблицы указан идентификатор процесса (ID), во втором столбце таблицы – время его выполнения в миллисекундах, в третьем столбце перечислены с разделителем «;» ID процессов, от которых зависит данный процесс. Если процесс является независимым, то в таблице указано значение 0.

Типовой пример организации данных в файле
 
ID процесса B Время выполнения процесса B (мс) ID процесса(ов) A
1 4 0
2 3 0
3 1 1; 2
4 7 3
 

Определите максимальную продолжительность отрезка времени (в мс), в течение которого возможно одновременное выполнение пяти процессов, при условии, что все независимые друг от друга процессы могут выполняться параллельно.

 

Типовой пример имеет иллюстративный характер. Для выполнения задания используйте данные из прилагаемого файла.

Файл к заданию

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить количество камней в куче в два раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней.
Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 127. Победителем считается игрок, сделавший последний ход, т.е. первым получивший такую позицию, при которой в кучах оказывается 127 или больше камней.

В начальный момент в первой куче было 17 камней, во второй куче – S камней; 1 ≤ S ≤ 109.

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.


Задание 19
Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение S, при котором такая ситуация возможна.


Задание 20
Для описанной игры, найдите два значения S, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

– Петя не может выиграть за один ход;
– Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.

Найденные значения запишите в ответе в порядке возрастания.


Задание 21
Для описанной игры, найдите минимальное значение S, при котором одновременно выполняются два условия:

– у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Если найдено несколько значений S, в ответе укажите наименьшее из них.

Квадрат разлинован на N × N клеток (1 < N < 30). Исполнитель Робот может перемещаться по клеткам, выполняя за одно перемещение одну из двух команд: вправо или вниз. По команде вправо Робот перемещается в соседнюю правую клетку, по команде вниз – в соседнюю нижнюю. Квадрат ограничен внешними стенами. Между соседними клетками квадрата также могут быть внутренние  стены. Сквозь стену Робот пройти не может.
Перед каждым запуском Робота в каждой клетке квадрата лежит монета достоинством от 1 до 100. Посетив клетку, Робот забирает монету с собой; это также относится к начальной и конечной клеткам маршрута Робота.

В «угловых» клетках поля – тех, которые справа и снизу ограничены стенами, Робот не может продолжать движение, поэтому накопленная сумма считается итоговой. Таких конечных клеток на поле может быть несколько, включая правую нижнюю клетку поля. При разных запусках итоговые накопленные суммы могут различаться.

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

Исходные данные представляют собой электронную таблицу размером N × N, каждая ячейка которой соответствует клетке квадрата. Внутренние и внешние стены обозначены утолщёнными линиями.

Пример входных данных


 

Файл к заданию

Вводится последовательность целых чисел. Элементы последовательности могут принимать целые значения от  1 до 100 000 включительно.

Определите количество пар последовательности, в которых ровно одно число меньше минимального элемента последовательности, оканчивающегося на 27 . В ответе запишите два числа через пробел: сначала количество найденных пар, затем минимальную из сумм элементов таких пар. 
В данной задаче под парой подразумевается два идущих подряд элемента последовательности.

Алгоритм вычисления значения функции \(F(n)\), где \(n\) -  натуральное число, задан следующими соотношениями:
\(F(n) = 1, \ при \ n < \ 10 \);
\(F(n) = F(n-2) + 2 * (n-1), \ при \ n \geq \ 10 \).

Чему равно значение выражения \(F(12007) - F(11007)\)?
На числовой прямой даны два отрезка: \(В = [2; 18]\) и \(С = [8; 22]\). Укажите наименьшую возможную длину такого отрезка \(A\), для которого логическое выражение
\(((x \in A) \lor (x \notin C) \land (x \in B)) \rightarrow ( x \in A)\)
истинно (т.е. принимает значение 1) при любом значении переменной \(x\).
Реализуйте структуру данных для эффективного вычисления номера максимального из нескольких подряд идущих элементов массива.

Входные данные
В первой строке вводится одно натуральное число N (\(1 <= N <= 100000\)) — количество чисел в массиве.

Во второй строке вводятся N чисел от 1 до 100000 — элементы массива.

В третьей строке вводится одно натуральное число K (\(1 <= K <= 30000\)) — количество запросов на вычисление максимума.

В следующих K строках вводится по два числа — номера левого и правого элементов отрезка массива (считается, что элементы массива нумеруются с единицы).

Выходные данные
Для каждого запроса выведите индекс максимального элемента на указанном отрезке массива. Если максимальных элементов несколько, выведите любой их них.

Числа выводите в одну строку через пробел.
Определите в 64-ричной записи числа количество цифр с числовым значением, превышающим 12
\(9 \cdot 3700^{2008} + 3 \cdot 4857^{2020} - 2 \cdot 3642^{2010} - 10 \cdot 4072^{2011} + 5 \cdot 3893^{2016} - 3 \cdot 4113^{2012}.\)
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети.
Сеть задана IP-адресом 24.188.80.0 и маской сети 255.255.254.0.
Сколько в этой сети IP-адресов, для которых количество единиц в двоичной записи IP-адреса нечётна?

В ответе укажите только число.

Исполнитель Редактор получает на вход строку символов и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w
обозначают цепочки символов.
А) заменить (v, w)
Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды 
заменить (111, 27) преобразует строку 05111150 в строку 0527150.
Если в строке нет вхождении? цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.
Б) нашлось (v)
Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение
«истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.

Цикл

ПОКА условие
    последовательность команд
КОНЕЦ ПОКА

выполняется, пока условие истинно.

В конструкции

ЕСЛИ условие
ТО команда1
ИНАЧЕ команда2

КОНЕЦ ЕСЛИ

выполняется команда1 (если условие истинно) или команда2 (если условие ложно).

Дана программа для Редактора:
НАЧАЛО
ПОКА нашлось (2222) ИЛИ нашлось (7777)
  ЕСЛИ нашлось (2222)
     ТО заменить (2222, 777)
  ИНАЧЕ
     заменить (7777, 222) 
  КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ

Определите строку, которая получится в результате применения приведённой выше программы к входной строке, содержащий 2007 цифр «2», после которых идет 2007 цифр «7».
В ответе укажите только полученную строку.
При регистрации в компьютерной системе каждому объекту присваивается идентификатор, состоящий из 195 символов и содержащий только десятичные цифры и символы из 1546-символьного специального алфавита. В базе данных ддя хранения каждого идентификатора отведено одинаковое и минимально возможное целое число байт. При этом используется посимвольное кодирование идентификаторов, все символы кодируются одинаковым и минимально возможным количеством бит.
Определите объем памяти (в Кбайт), необходимый для хранения 32768 идентификаторов. 
В ответе запишите только целое число - количество Кбайт. 
Поделиться
Класснуть