Системы счисления(36 задач)
"Длинная" арифметика(58 задач)
Простые числа и разложение на множители(45 задач)
Остатки(21 задач)
Быстрое возведение в степень(3 задач)
Быстрое преобразование Фурье(3 задач)
Рассмотрим компьютерную сеть с настроенной TCP/IP маршрутизацией. Будем рассматривать некоторую ее модификацию. А именно в этой сети находить N подсетей. Каждая подсеть характеризуется своей маской. Маска подсети представляет собой 4 однобайтных числа, разделенных точкой. Причем для масок выполнено следующее свойство: если представить маску в двоичном виде, то сначала она будет содержать k единиц, а потом q нулей, причем k + q = 32 . Например 255.255.255.0 — маска подсети, а 192.168.0.1 — нет.
Поясним, как получается двоичное представление IP-адреса. Для этого числа, составляющие IP-адрес, представляются в двоичной системе счисления (при этом каждое из них дополняется ведущими нулями до длины 8 цифр), после чего удаляются точки. Получившееся 32-битное число и есть двоичное представление IP-адреса. Например, для адреса 192.168.0.1 этот процесс выглядит так: 192.168.0.1 -> 11000000.10101000.00000000.00000001 -> 11000000101010000000000000000001. Таким образом, двоичным представлением IP-адреса 192.168.0.1 является 11000000101010000000000000000001.
Будем говорить, что два компьютера с IP 1 и IP 2 лежат в подсети, если IP 1 & Mask = IP 2 & Mask , где Mask — маска этой подсети, а & — операция побитового логического "и". IP компьютера представляет так же 4 однобайтных числа, разделенных точкой.
Вам даны M пар IP-адресов компьютеров. Для каждой из них Вам надо определить, в скольких подсетях из заданных они лежат.
В первой строке входного файла записано число N — количество подсетей. В следующий N строках перечислены маски этих подсетей. В N + 2 строке находится число M (0 ≤ M ≤ 100000) . В следующих M строках записаны пары IP-адресов, разделенных пробелом.
Все заданные маски подсетей различны.
Для каждой пары IP-адресов в отдельной строке выходного файла выведите количество подсетей, в которых лежат оба компьютера.
2 255.255.255.255 255.255.255.0 3 192.168.31.1 192.168.31.2 192.168.31.3 192.168.31.4 192.168.31.1 192.167.31.2
1 1 0
Главный режиссер шоу, посвященного открытию ACM Programming Contest, хочет, чтобы участники шоу могли выстраиваться в различное число колонн ровно N способами. Причем при любом перестроении количество людей в каждой из колонн должно быть одинаковым. Требуется сообщить режиссеру, какое минимальное число М человек ему для этого понадобится. Так, при N = 3 потребуется пригласить всего М = 4 человек, которые могут выстроиться в 1, 2 и 4 колонны. Если же при некотором N для шоу потребуется более 10 9 человек, то режиссеру можно сообщить, что подходящее число людей собрать невозможно.
Программа запрашивает натуральное число N ≤ 1000
Если для введенного N минимальное число людей М для шоу не превосходит 10 9 , то выдать это число М , в противном случае число 0.
5
16
6
12
24
360
Во владениях короля Флатландии находится прямая дорога длиной \(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
Числа в позиционной троично-симметричной системе счисления записываются с использованием трех символов: +, –, 0. Например, такими числами являются, например,
"+ + 0 – 0", "– – 0 +", "– – –".
Эти числа переводятся в десятичную систему как:
а) + + 0 – 0 = 1*\(3^4\) + 1*\(3^3\) + 0*\(3^2\) – 1*\(3^1\) + 0*\(3^0\)
б) – – 0 + = – 1*\(3^3\) – 1*\(3^2\) + 0*\(3^1\) + 1*\(3^0\)
в) – – – = – 1*\(3^2\) – 1*\(3^1\) – 1*\(3^0\)
Над числами в позиционной троично-симметричной системе счисления можно выполнять два действия: сложение (+) и вычитание (–). Требуется написать программу, которая вычисляет сумму или разность чисел в троично-симметричной системе счисления. Таблица Пифагора для сложения цифр в троично-симметричной системе счисления имеет вид:
В единственной строке записаны два числа в троично-симметричной системе счисления, между которыми в скобках записана требуемая операция. Разрядность чисел не превышает 15.
В единственной строке необходимо вывести полученный в результате заданной операции результат в троично-симметричной системе счисления.
+++0-(+)-0+
++000
Вася очень любит учиться, но некоторые уроки в школе—полная скукотища. Для того чтобы скрасить время, они с Петей придумали игру. Перед началом партии ребята пишут на листочке два различных натуральных числа aиb . Затем по очереди делают ход: среди записанных чисел выбирают p и q такие, что модуля их разности | p − q | еще нет на листке, и дописывают его. Проигрывает тот, кто не может сделать ход. Определите, кто из ребят окажется победителем при правильной игре обоих. Вася вежливый мальчик, поэтому всегда ходит вторым.
В первой и единственной строке записано два различных натуральных числа 1 ≤ a , b ≤ 10^9 , разделенные пробелом—два исходных числа на листке.
Выведите имя победителя
В первом примере Петя первым ходом допишет на листок число |6−2| = 4 . Больше ходов нет, поэтому выигрывает Петя. Во втором примере первым ходом на листок будет дописано число |4−1| = 3 . Затем Вася может записать |3−1| = 2 , тогда у Пети ходов не останется. Побеждает Вася.
6 2
Petya
4 1
Vasya