Язык программирования

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

Для каждого товара известны его код и цена. Нужно сохранить эти сведения в словаре, а затем отвечать на запросы о цене товара.

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

n = int(input())
prices = {}
for _ in range(n):
    product, price = input().split()
    price = int(price)
    # Добавьте товар и его цену в словарь

m = int(input())
for _ in range(m):
    product = input()
    print(prices[product])
Входные данные

Первая строка содержит целое число N — количество товаров (1 ≤ N ≤ 10 000). Следующие N строк содержат код товара и целую цену через пробел. Коды различны.

Код — строка длиной от 1 до 20 символов, состоящая из латинских букв и цифр. Регистр букв имеет значение; ведущие нули являются частью кода. Цена находится в диапазоне от 0 до 109 рублей включительно.

Затем вводится целое число M — количество запросов (1 ≤ M ≤ 10 000). В каждой из следующих M строк находится один код товара.

Гарантируется, что каждый запрашиваемый код присутствует среди первых N записей.

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

Для каждого запроса выведите цену товара в отдельной строке. Сохраните порядок запросов, включая повторные.

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

Программа получает код одного товара. Допишите вывод цены этого товара. Скопируйте подготовленный код и замените комментарий своей строкой.

prices = {
    'pen': 35,
    'pencil': 20,
    'notebook': 70,
    'ruler': 45,
    'eraser': 20,
    'marker': 90,
    'folder': 120,
    'paper': 350
}

product = input()
# Допишите вывод цены товара
Входные данные

Одна строка содержит один из кодов, перечисленных в словаре. Код записан строчными латинскими буквами. Гарантируется, что он присутствует в словаре.

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

Выведите одно целое число — цену указанного товара в рублях. Другой текст выводить не нужно.

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

\[\frac{\Delta F}{F} = \left(\frac{R_p}{R_\star}\right)^{2} \qquad\Longrightarrow\qquad R_p = R_\star\sqrt{\frac{\Delta F}{F}}\]

Радиус звезды \(R_\star\) задан в радиусах Солнца, где \(R_\odot = 6{,}957 \cdot 10^{8}\) м. Вычислить радиус планеты в радиусах Юпитера, где \(R_{\mathrm{J}} = 7{,}1492 \cdot 10^{7}\) м.

Проверьте порядок величины: для глубины около одного процента и звезды солнечного радиуса должна получиться планета размером примерно с Юпитер.

Ввод. Два вещественных числа, каждое на своей строке: \(R_\star\) в радиусах Солнца и глубина транзита \(\Delta F/F\), где \(0 \lt R_\star \le 1000\) и \(0 \lt \Delta F/F \le 1\).

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

Формат вывода. Ответ выводится ровно с шестью знаками после запятой, например print(f"{x:.6f}"). Функция round для вывода не годится: она отбрасывает незначащие нули, и 2.00709 не совпадёт с 2.007090.

Видимая звёздная величина \(m\) и абсолютная звёздная величина \(M\) связаны с расстоянием до звезды соотношением

\[m - M = 5\lg d - 5\]

где \(d\) выражено в парсеках. Отсюда

\[d = 10^{\,(m - M + 5)/5}\]

Вычислить расстояние до звезды в парсеках.

Здесь возведение в степень с дробным показателем: в Python это оператор **. Проверьте себя определением абсолютной звёздной величины: если \(m = M\), расстояние равно ровно 10 парсекам.

Ввод. Два вещественных числа, каждое на своей строке: \(m\) и \(M\), где \(-30 \le m \le 30\) и \(-30 \le M \le 30\).

Вывод. Расстояние в парсеках с шестью знаками после запятой.

Формат вывода. Ответ выводится ровно с шестью знаками после запятой, например print(f"{x:.6f}"). Функция round для вывода не годится: она отбрасывает незначащие нули, и 2.00709 не совпадёт с 2.007090.

Тело обращается вокруг центрального тела массой \(M\) по орбите с большой полуосью \(a\). Период обращения

\[T = 2\pi\sqrt{\frac{a^{3}}{GM}}\]

где \(G = 6{,}67430 \cdot 10^{-11}\) м³·кг⁻¹·с⁻².

Вычислить период обращения в сутках (1 сутки = 86400 с).

Проверьте себя: для орбиты Земли, где \(a = 1{,}496 \cdot 10^{11}\) м и \(M = 1{,}989 \cdot 10^{30}\) кг, должно получиться около 365 суток.

Ввод. Два вещественных числа, каждое на своей строке: \(a\) в метрах и \(M\) в килограммах.

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

Формат вывода. Ответ выводится ровно с шестью знаками после запятой, например print(f"{x:.6f}"). Функция round для вывода не годится: она отбрасывает незначащие нули, и 2.00709 не совпадёт с 2.007090.

Тело брошено с поверхности земли со скоростью \(v\) под углом \(\alpha\) к горизонту. Сопротивление воздуха не учитывается. Дальность полёта

\[L = \frac{v^{2}\,\sin 2\alpha}{g}\]

Вычислить дальность.

Угол задан в градусах, а тригонометрические функции принимают радианы: переведите угол функцией math.radians. Учтите, что \(\sin 2\alpha \ne 2\sin\alpha\).

Проверьте себя предельными случаями: при \(\alpha = 0\) и при \(\alpha = 90^\circ\) дальность обращается в ноль, а максимум достигается при \(\alpha = 45^\circ\).

Ввод. Три вещественных числа, каждое на своей строке: \(v\) в м/с, \(\alpha\) в градусах и \(g\) в м/с², где \(0 \le v \le 10^4\), \(0 \le \alpha \le 90\), \(0 \lt g \le 100\).

Вывод. Дальность полёта в метрах с шестью знаками после запятой.

Формат вывода. Ответ выводится ровно с шестью знаками после запятой, например print(f"{x:.6f}"). Функция round для вывода не годится: она отбрасывает незначащие нули, и 2.00709 не совпадёт с 2.007090.

Три резистора соединены параллельно. Их общее сопротивление находится из

\[\frac{1}{R} = \frac{1}{R_1} + \frac{1}{R_2} + \frac{1}{R_3}\]

Вычислить \(R\).

Ввод. Три вещественных числа, каждое на своей строке: \(R_1\), \(R_2\), \(R_3\) в омах, где \(0 \lt R_i \le 10^6\).

Вывод. Общее сопротивление в омах с шестью знаками после запятой.

Формат вывода. Ответ выводится ровно с шестью знаками после запятой, например print(f"{x:.6f}"). Функция round для вывода не годится: она отбрасывает незначащие нули, и 2.00709 не совпадёт с 2.007090.

Период малых колебаний математического маятника длиной \(L\) при ускорении свободного падения \(g\) равен

\[T = 2\pi\sqrt{\frac{L}{g}}\]

Вычислить период.

 

Ввод. Два вещественных числа, каждое на своей строке: \(L\) в метрах и \(g\) в м/с², где \(0 \lt L \le 10^6\), \(0 \lt g \le 100\).

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

Формат вывода. Ответ выводится ровно с шестью знаками после запятой, например print(f"{x:.6f}"). Функция round для вывода не годится: она отбрасывает незначащие нули, и 2.00709 не совпадёт с 2.007090.

Палитра изображения содержит \(N\) различных оттенков. Определить наименьшее целое число бит, которого достаточно для кодирования номера оттенка, то есть наименьшее \(i\), при котором

\[2^i \ge N\]

Напрашивается решение math.ceil(math.log2(N)). Оно работает не всегда: логарифм вычисляется приближённо, и на больших \(N\) результат может отличаться от истинного на единицу. Проверьте своё решение на \(N = 2^{50}\) и \(N = 2^{50} + 1\).

Точный ответ даёт (N - 1).bit_length(): метод возвращает число значащих двоичных разрядов, а у числа \(N - 1\) их ровно столько, сколько бит нужно для \(N\) значений.

Ввод. Одно целое число \(N\), где \(1 \le N \le 10^{18}\).

Вывод. Одно целое число — количество бит.

Производится звукозапись с частотой дискретизации f Гц и глубиной кодирования b бит на отсчёт. Запись ведётся по c каналам. Определить, сколько целых секунд записи поместится в память объёмом V байт.

Чтобы не терять точность, переведите объём памяти в биты.

Ввод. Четыре целых числа, каждое на своей строке: \(f\), \(b\), \(c\) и \(V\), где \(1 \le f \le 10^6\), \(1 \le b \le 64\), \(1 \le c \le 8\), \(1 \le V \le 10^{15}\).

Вывод. Одно целое число — количество целых секунд.

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

Определить объём памяти, необходимый для хранения сведений о P пользователях.

Округлять вверх придётся дважды и на разных уровнях: сначала — число бит на один символ, затем — число байт на одно имя. Типичная ошибка состоит в том, чтобы округлить итоговый объём вместо объёма одной записи; проверьте себя на примере.

Число бит на символ — наименьшее \(i\), при котором \(2^i \ge M\). Его можно получить без цикла: (M - 1).bit_length().

Ввод. Четыре целых числа, каждое на своей строке: \(N\), \(M\), \(K\) и \(P\), где \(1 \le N \le 1000\), \(1 \le M \le 10^6\), \(0 \le K \le 1000\), \(1 \le P \le 10^6\).

Вывод. Одно целое число — объём памяти в байтах.

Числовая ось разбита на ячейки шагом \(h\), начиная от нуля: ячейка с номером \(k\) занимает промежуток \(\bigl[\,k h,\ (k+1)h\,\bigr)\). Для координаты \(x\) определить номер ячейки, в которую она попадает, — двумя способами: как x // h и как int(x / h).

Координата может быть отрицательной. Найдите такие x, при которых два способа дают разные ответы, и объясните, какой из них верен.

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

Ввод. Два целых числа, каждое на своей строке: \(x\) и \(h\), где \(-10^6 \le x \le 10^6\), \(1 \le h \le 10^6\).

Вывод. Два целых числа через пробел: результат x // h и результат int(x / h).

На струне длиной L миллиметров возбуждена волна длиной λ миллиметров. Определить наибольшее число целых полуволн, укладывающихся на струне.

Полуволна равна \(\lambda/2\), поэтому число полуволн равно

\[\frac{L}{\lambda/2} = \frac{2L}{\lambda}\]

 

Ввод. Два целых числа, каждое на своей строке: \(L\) и \(\lambda\), где \(1 \le L \le 10^{16}\), \(1 \le \lambda \le 10^9\).

Вывод. Одно целое число — количество целых полуволн.

Аккумулятор ёмкостью Q мА·ч питает прибор, потребляющий постоянный ток I мА.

Ответить на два вопроса:

1. Сколько целых часов проработает прибор от одного полностью заряженного аккумулятора? 2. Сколько аккумуляторов потребуется, чтобы прибор проработал непрерывно T часов?

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

Ввод. Три целых числа, каждое на своей строке: \(Q\), \(I\) и \(T\), где \(1 \le Q \le 10^9\), \(1 \le I \le 10^9\), \(1 \le T \le 10^9\).

Вывод. В первой строке — число целых часов работы одного аккумулятора. Во второй — число аккумуляторов на T часов работы.

Маятник совершает одно полное колебание за T миллисекунд. Наблюдение длилось t миллисекунд, причём в начальный момент маятник только начинал колебание.

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

Ввод. В первой строке — целое \(T\), где \(1 \le T \le 10^6\). Во второй — целое \(t\), где \(0 \le t \le 10^{12}\).

Вывод. Два целых числа через пробел: число полных колебаний и остаток времени в миллисекундах.

Дано трёхзначное натуральное число. Требуется вывести его разряды по отдельности, а затем сумму разрядов.

Задача отрабатывает связку операций // и %: деление на десять сдвигает число на разряд вправо, остаток от деления на десять снимает младшую цифру.

Ввод. Одно целое число \(n\), где \(100 \le n \le 999\).

Вывод. В первой строке — три числа через пробел: цифра сотен, цифра десятков, цифра единиц. Во второй строке — сумма разрядов.

Многие старейшие шифры основаны на замене букв на числа, например, в шифре A1Z26 каждая буква заменяется на её порядковый номер в алфавите. Вдохновившись этой идеей, первоклассник Петя решил придумать свой шифр-замену. Он хочет каждую букву от <<A>> до <<R>> (первые \(18\) букв латинского алфавита) заменять на одно из чисел \(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 40, 50, 60, 70, 80, 90\). Числа выбраны так, чтобы при дешифровке легко разделить последовательность цифр на коды букв, причём весь алфавит Петя не смог использовать, ибо сотни он ещё не узнал.

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

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

Программа получает на вход непустую строку \(s\), состоящую из прописных букв латинского алфавита от <<A>> до <<R>>, длина строки не превышает 1000 символов.

Программа должна вывести одно число — шифр строки \(s\). Обратите внимание, число может быть длинным.

Решения, правильно работающие, когда строка состоит не более чем из \(4\) символов, будут оцениваться в \(20\) баллов.

Решения, правильно работающие, когда строка состоит из букв <<A>> и <<B>>, будут оцениваться в \(20\) баллов.

Решения, правильно работающие, когда строка состоит из букв от <<A>> до <<I>>, будут оцениваться в \(44\) балла.

Даны два прямоугольника размера \(a\times b\) и \(c\times d\). Можно соединить их вместе, приложив сторону одного прямоугольника к стороне другого и склеив место соединения. Прямоугольники можно поворачивать перед склеиванием. После этого из полученной фигуры нужно вырезать квадрат со сторонами, параллельными сторонам прямоугольника. Определите максимальное возможное значение стороны квадрата.

На рисунке изображены два прямоугольника со сторонами \(8\times 3\) и \(6\times 2\), из которых можно вырезать квадрат со стороной 5 (заштрихован).

image

Программа получает на вход натуральные числа \(a\), \(b\), \(c\), \(d\), каждое в отдельной строке — стороны первого и второго прямоугольников. Все числа не превосходят \(10^9\).

Программа должна вывести одно целое число — максимальную возможную сторону квадрата.

СЕКРЕТНО
Дело VOIDLINKER · Эпизод 12 из 13
Транзакция-маркер
ИСТОЧНИК: лог финансовой системы CYBERONE-FIN
ИЗ ПЕРЕХВАЧЕННОЙ ПЕРЕПИСКИ:
«Когда я отмываю украденные средства, ID транзакций подчиняется правилу: все цифры в десятичной записи различны — никаких повторов. Найди мой самый крупный ID — это самая большая отмытая сумма. — V.»
ФОРМАЛЬНАЯ ЗАДАЧА

Определите максимальное число, в десятичной записи которого все цифры различны. Под числом понимается максимальная последовательность цифр, ограниченная нецифровыми символами или границами строки. Числа с ведущими нулями (кроме 0) не рассматриваются. Если подходящих нет — выведите 0.

ВХОДНЫЕ ДАННЫЕ

Одна строка из заглавных букв и цифр, до 105 символов.

ВЫХОДНЫЕ ДАННЫЕ

Само найденное число.

Поделиться
Класснуть