математика

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

Недавно директору Ресторана Отеля пришла в голову следующая мысль: <<Все какое-то обычное. Надо что-то модернизировать!>> Именно так и решили заменить всех официантов на роботов или, точнее, робоантов.

Но вот беда! Денег на закупку высококачественного оборудования не нашлось, и партия робоантов была заказана в ОАО <<В Гараже у Петровича>>. И вот теперь, спустя неделю работы по непонятным причинам робоанты начали глючить. Проблема в том, что скоро в Отеле большой банкет. Для его проведения в Ресторане уже расставили \(n\) столов и приготовили \(n\) блюд. Все блюда попарно различны и имеют номера от \(1\) до \(n\). Изначально, блюда по мере готовности как-то расставили по \(n\) столам, причем на каждый стол поставили только одно блюдо. Однако, к банкету необходимо расставить все на свои места, а именно, \(i\)-е блюдо должно оказаться на \(i\)-м столе.

Рядом с каждым столом изначально стоит робоант. Далее каждый робоант независимо от других может выполнять следующую операцию неограниченное число раз: пусть сейчас робоант стоит у \(i\)-го стола. Тогда, если у него с собой нет ни одного блюда, он может взять (а может и не брать) блюдо в данный момент, находящееся на \(i\)-м столе и перейти к любому \(j\)-му столу при условии, что \(i\) и \(j\) имеют общий делитель больший \(1\). Далее, если у робоанта есть с собой блюдо, он может положить его на \(j\)-й стол (а может и не класть).

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

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

Во-второй строке записано \(n\) различных целых чисел \(a_1, a_2, \dots a_n\) (\(1 \le a_i \le n\)) — номера блюд изначально расставленных на соответственно \(1\)-й, \(2\)-й, …\(n\)-й столиках.

Формат выходных данных
Выведите <<YES>>, если робоанты смогут расставить все блюда по местам, и <<NO>> в противном случае случае.

 

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

  1. Берёт со \(2\)-го стола \(8\)-е блюдо, перемещается к \(8\)-му столу, кладет блюдо.

  2. Берёт с \(8\)-го стола \(2\)-е блюдо, перемещается ко \(2\)-му столу, кладет блюдо.

  3. Перемещается к \(4\)-му столу.

  4. Берёт с \(4\)-го стола \(6\)-е блюдо, перемещается к \(6\)-му столу, кладет блюдо.

  5. Берёт с \(6\)-го стола \(4\)-е блюдо, перемещается к \(4\)-му столу, кладет блюдо.

Можно доказать, что во втором примере невозможно расставить все блюда по местам.

На борту «Нулевого указателя» обнаружили старинный сундук с n рычагами. Чтобы открыть его, рычаги нужно нажимать в правильном порядке — но Шкипер Баг этого порядка не знает.

Когда Шкипер Баг нажимает рычаг: если этот рычаг действительно следующий в правильной последовательности — он остаётся нажатым. Если рычаг неправильный — он сбрасывается вместе со всеми уже нажатыми рычагами, и придётся начинать заново с нужного места.

Когда все n рычагов окажутся нажаты одновременно — сундук откроется. Шкипер Баг действует оптимально. Найдите количество нажатий в худшем случае.

Формат входных данных

Единственная строка: целое число n (1 ≤ n ≤ 2000) — количество рычагов.


Формат выходных данных

Одно число — количество нажатий в худшем случае.

 

Примечание (n = 3). Пусть правильная последовательность — {2, 3, 1}.

Шкипер Баг ищет первый рычаг. Нажимает рычаг 1 — сброс (1 нажатие). Нажимает рычаг 3 — сброс (2 нажатия). Нажимает рычаг 2 — остаётся нажатым (3 нажатия).

Теперь ищет второй рычаг. Нажимает рычаг 1 — сброс, рычаг 2 тоже сбросился (4 нажатия). Повторно нажимает рычаг 2 (5 нажатий), затем рычаг 3 — остаётся нажатым (6 нажатий).

Ищет третий рычаг. Единственный оставшийся — рычаг 1, нажимает (7 нажатий). Сундук открыт!

Итого в худшем случае: 7 нажатий.

В трюме «Нулевого указателя» хранится стопка из n секретных свитков с морскими картами, пронумерованных от 1 до n. Сверху лежит свиток a1, под ним a2, и так далее. Все номера различны.

Капитан Архипов, не отрываясь от чая, выкрикивает номера нужных свитков. На i-м шаге он требует свиток bi. Если свиток ещё в стопке — Шкипер Баг снимает его вместе со всеми свитками выше (вытащить из середины нельзя — свитки слиплись от сырости). Если нужного свитка в стопке уже нет — Шкипер Баг делает умное лицо и ждёт следующей команды.

Посчитайте, сколько свитков Шкипер Баг достанет на каждом шаге.

Формат входных данных
Первая строка: n (1 ≤ n ≤ 200 000).

Вторая строка: n чисел ai — начальный порядок стопки (все различны).

Третья строка: n чисел bi — порядок требований капитана (все различны).

Формат выходных данных
n чисел — количество свитков, снятых на каждом шаге.


Примечание: 
В тестовом примере капитан потребовал свиток №2 — Шкипер Баг снял №1 и №2 сверху (2 штуки). Затем потребовал №1 — но его уже нет, ничего не происходит. Затем №3 — снял один.

**Замечание: время на тест в этой задаче 4 сек, в два раза больше, чем по умолчанию.**

Фермер Джон распределил коров и пакеты по странной схеме на числовой оси, используя следующий процесс:

  • ФД выбрал число \(M\) (\(1 \le M \le 10^{18}\)).
  • ФД выбрал \(N\) (\(1 \le N \le 2 \cdot 10^4)\) интервалов \([L_i, R_i]\) чтобы распределить коров (\(1 \le L_i \le R_i \le 10^{18}\)). Затем он разместил коров в позициях \(L_i, L_i + M, L_i + 2M, \ldots, R_i\). Гарантируется, что \(R_i - L_i\) кратно \(M\).
  • ФД выбирает \(P\) (\(1 \le P \le 2 \cdot 10^4)\) интервалов \([A_i, B_i]\) чтоб распределить пакеты (\(1 \le A_i \le B_i \le 10^{18}\)). Затем он размещает пакеты в позициях \(A_i, A_i + M, A_i + 2M, \ldots, B_i\). Гарантируется, что \(B_i - A_i\) кратно \(M\).
Поле распределения коров и пакетов, ФД хочет увидеть сколько времени требуется коровам, чтобы забрать пакеты. Каждую секунду ФД может дать команду одной корове двинуться на одну единицу влево или вправо от текущей позиции. Если корова попадает в позицию, где размещён пакет, она его забирает. ФД хочет узнать минимальное количество секунд, которое потребуется коровам чтобы собрать все пакеты.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(M\), \(N\), \(P\).

Каждая из последующих \(N\) строк содержит два целых числа \(L_i\) и \(R_i\).

Каждая из последующих \(P\) строк содержит два целых числа \(A_i\) и \(B_i\).

ФОРМАТ ВЫВОДА (на экран / stdout):

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

Бесси экспериментирует с мощным имплантатом копыта, который способен создавать мощные ударные волны. Перед ней выстроено \(N\) (\(2 \leq N \leq 10^5\)) плиток, для разрушения которых требуется мощность не менее \(p_0,p_1,\dots,p_{N-1}\), соответственно (\(0 \leq p_i \leq 10^{18}\)).

Бесси может применить силу, ударив по определенной плитке, но из-за странной природы ее имплантата, она не применит никакой силы к плитке, которую она пробьет. Вместо этого, если она решит ударить плитку \(x\) один раз, где \(x\) — это целое число в диапазоне \([0,N-1]\), она применит \(|i-x|\) силу к плитке \(i\) для всех целых чисел \(i\) в диапазоне \([0,N-1]\). Эта сила также является кумулятивной, поэтому применение \(2\) силы дважды к плитке применит в общей сложности \(4\) силы к плитке.

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

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(T\) (\(1 \leq T \leq 100\)) представляющее количество подтестов.

Строка \(2t\) содержит одно целое число \(N\), количество плиток в подтесте \(t\).

Строка \(2t+1\) содержит \(N\) разделённых одиночными пробелами чисел \(p_0,p_1, \ldots, p_{N-1}\) представляющих что плитку \(i\) разрушит удар силы \(p_i\).

Гарантируется, что сумма всех \(N\) в одном тесте не превысит \(5\cdot 10^5\).

ФОРМАТ ВЫВОДА (на экран / stdout):

\(T\) строк, \(i\)-ая строка представляет ответна \(i\)-ый подтест.

У Фермера Джона есть массив \(a\) из \(N\) (\(1 \leq N \leq 2 \cdot 10^5\)) неотрицательных целых чисел и целое число \(M\) (\(1 \leq M \leq 10^9\)). Затем ФД спрашивает у Беси число \(x\). За одну операцию ФД может выбрать индекс \(i\) и вычесть или прибавить \(1\) к \(a_i\). ФД называет число скучным - если оно равно минимальному количеству операций, которые он должен выполнить, чтобы \(a_i-x\) стало делится на \(M\) для всех \(1 \leq i \leq N\).

Среди всех возможных \(x\) выберите минимально возможное скучное число.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(T\) (\(1 \leq T \leq 10\)), количество независимых подтестов.

Первая строка каждого подтеста содержит числа \(N\) и \(M\).

Вторая строка каждого подтеста содержит \(a_1, a_2, ..., a_N\) (\(0 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(N\) по всем подтестам не превысит \(5 \cdot 10^5\).

ФОРМАТ ВЫВОДА (на экран / stdout):

Для каждого подтеста выведите целое число - минимальное скучное число по всем возможным \(x\).

Для любых двух положительных целых чисел \(a\) и \(b\) определим функцию \(\texttt{gen_string}(a,b)\) следующим кодом Python:

def gen_string(a: int, b: int):
	res = ""
	ia, ib = 0, 0
	while ia + ib < a + b:
		if ia * b <= ib * a:
			res += '0'
			ia += 1
		else:
			res += '1'
			ib += 1
	return res

Эквивалентный код C++:

string gen_string(int64t a, int64t b) {
	string res;
	int ia = 0, ib = 0;
	while (ia + ib < a + b) {
		if ((__int128)ia * b <= (__int128)ib * a) {
			res += '0';
			ia++;
		} else {
			res += '1';
			ib++;
		}
	}
	return res;
}

\(ia\) будет равно \(a\), а \(ib\) будет равно \(b\), когда цикл завершится, так что это функция возвращает битовую строку длины \(a+b\), содержащую ровно \(a\) нулей и \(b\) единиц. Например, \(\texttt{gen_string}(4,10)=01110110111011\).

Назовём строку битов \(s\) \(\textbf{хорошей}\), если существуют положительные целые числа \(x\) и \(y\) такие, что \(s=\texttt{gen_string}(x,y)\). Даны два натуральных числа \(A\) и \(B\) (\(1\le A,B\le 10^{18}\)), ваша задача состоит в том, чтобы вычислить количество хороших префиксов \(\texttt{gen_string}(A,B)\). Например, есть \(6\) хороших префиксов \(\texttt{gen_string}(4,10)\):

х = 1 | у = 1 | gen_string(х, у) = 01
х = 1 | у = 2 | gen_string(х, у) = 011
х = 1 | у = 3 | gen_string(х, у) = 0111
х = 2 | у = 5 | gen_string(х, у) = 0111011
х = 3 | у = 7 | gen_string(х, у) = 0111011011
х = 4 | у = 10 | gen_string(х, у) = 01110110111011

ФОРМАТ ВВОДА (ввод поступает с терминала/стандартного ввода):

Первая строка содержит \(T\) (\(1\le T\le 10\)), количество подтестов.

Каждая из следующих строк \(T\) содержит два целых числа \(A\) и \(B\).

ФОРМАТ ВЫВОДА (вывод на терминал / стандартный вывод):

Ответ для каждого подтеста на новой строке.

ОБРАЗЕЦ ВВОДА:

6
1 1
3 5
4 7
8 20
4 10
27 21

ОБРАЗЕЦ ВЫВОДА:

1
5
7
10
6
13

ОЦЕНКА:

  • Тест 2: \(A,B\le 100\)
  • Тест 3: \(A,B\le 1000\)
  • Тесты 4–7: \(A,B\le 10^6\)
  • Тесты 8–13: все ответы не превышают \(10^5\).
  • Тесты 14–21: дополнительные ограничения отсутствуют.

Автор: Benjamin Qi

Bakery#90208

Беси открыла пекарню!

Она может делать печенье за \(t_C\) единиц времени или булочку за \(t_M\) единиц времени (\(1\le t_C,t_M\le 10^9\)). В каждый момент времени она может делать только один вид выпечки, поэтому чтобы произвести \(A\) печенек и \(B\) булочек, её требуется \(A \cdot t_C + B \cdot t_M\) единиц времени.

У Беси есть \(N\) (\(1\le N\le 100\)) друзей, которые любят заглядывать в пекарню по одному. \(i\)-ый друг делает заказ на \(a_i\) (\(1 \leq a_i\leq 10^9\)) печенек и \(b_i\) (\(1 \leq b_i \leq 10^9\)) булочек немедленно после входа. У Беси нет места хранить выпечку, поэтому она начинает изготовление сразу после получения заказа. Кроме того, друзья Беси очень заняты и не могут ждать более \(c_i\) (\(a_i + b_i \leq c_i \leq 2 \cdot 10^{18}\)) единиц времени, после чего печалятся и уходят.

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

Для каждого из \(T\) (\(1 \leq T \leq 100\) подтестов помогите Беси вычислить минимальное количество муни, которое ей требуется потратить так, чтобы её пекарня могла удовлетворить всех друзей.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(T\), количество подтестов.

Каждый подтест начинается со строки, содержащей \(N\), \(t_C\), \(t_M\). Затем следуют \(N\) строк, каждая из которых содержит три целых числа \(a_i,b_i, c_i\).

Последовательные подтесты разделены пустыми строками.

ФОРМАТ ВЫВОДА (на экран / stdout):

Минимальное количество муни, которые должна потратить Беси на каждый подтест на отдельной строке.

**Замечание: Время на тест 3 сек, в 1.5 раза больше чем по умолчанию.**

Фермер Джон дал Беси масив \(a\) длины \(N\) (\(2\le N\le 500, -10^{15}\le a_i\le 10^{15}\)) и все \(\frac{N(N+1)}{2}\) суммы непрерывных подмассивов различны. Для каждого индекса \(i\in [1,N]\), помогите Беси вычислить минимальное количество действий, чтобы изменить \(a_i\) так, чтобы появились два различных непрерывных подмассива \(a\) с равными суммами.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая срока содержит \(N\).

Следующая строка содержит \(a_1,\dots, a_N\) (элементы массива \(a\), по порядку).

ФОРМАТ ВЫВОДА (на экран / stdout):

Одна строка для каждого индекса \(i\in [1,N]\).

Cow Camp#90153
Чтобы отобраться на коровий лагерь, Беси должна набрать много очков на последней задаче из USACOW Open. В этой задаче есть \(T\) различных тестов (\(2\le T\le 10^3\)) с одинаковыми весами и первым тестов из примера условий. Её баллы будут равны количеству тестов, которое пройдёт её последняя отсылка.

Беси устала и потому не хочет решать задачу, но у неё есть план. Поскольку ответы только "yes" и "no", она решила непрерывно посылать такое решение

if input == sample_input:
  print sample_output
else:
  print "yes" или "no" с независимой вероятность 1/2 для каждого теста. 

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

Беси знает, что она может послать решение не более чем \(K\) (\(1\le K\le 10^9\)) раз поскольку иначе она будет дисквалифицирована. Каково максимальное значение счета Беси, если она будет придерживаться оптимальной стратегии?

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Единственная строка ввода содержит два разделённых пробелом целых числа \(T\) и \(K.\)

ФОРМАТ ВЫВОДА (на экран / stdout):

Выведите ответ как десятичную дробь, которая отличается от правильного ответа с абсолютной или относительной ошибкой, не превышающей \(10^{-6}\).

Имеется \(N\) (\(2\le N\le 2\cdot 10^5\)) миров, каждый с порталом. Изначально, мир \(i\) (for \(1 \leq i \leq N\)) имеет \(x\)-координату \(i\), и \(y\)-координату \(A_i\) (\(1\le A_i\le 10^9\)). В каждом мире есть по одной корове. В момент времени \(0\), все \(y\)-координаты различны и все миры начинают падать. Мир \(i\) двигается непрерывно в отрицательном направлении координаты \(y\) со скоростью \(i\) единиц в секунду.

В любой момент времени, когда два мира находятся на одной и той же \(y\)-координате (возможно в дробное время), порталы "выравниваются". Это означает, что корова из одного из этих миров, может используя эти порталы мгновенно перебраться в другой мир.

Для каждого \(i\) корова из мира \(i\) хочет перебраться в мир \(Q_i\) (\(Q_i\neq i\)). Определите для каждой коровы, сколько времени ей понадобиться, чтобы перебраться в желаемый мир, если она будет путешествовать оптимально.

Ответ на каждый запрос необходимо вывести в виде дроби \(a/b\), где \(a\) и \(b\) положительные и взаимно простые целые числа. Выведите \(-1\) если путешествие невозможно.

ОЦЕНИВАНИЕ:

  • В тестах 2-3 \(N\le 100.\)
  • В тестах 4-5 \(N\le 2000.\)
  • В тестах 6-14 нет дополнительных ограничений.

ФОРМАТ ВВОДА (файл falling.in):

Первая строка ввода должна содержать одно целое число \(N.\)

Следующая строка содержит \(N\) разделённых одиночными пробелами целых числе \(A_1,A_2,\ldots,A_N.\)

Следующая строка содержит \(N\) разделённых одиночными пробелами целых чисел \(Q_1,Q_2,\ldots,Q_N.\)

ФОРМАТ ВЫВОДА (файл falling.out):

Выведите \(N\) строк, \(i\)-th из которых содержит длину пути для коровы \(i.\)

Cowmistry#90090
Беси нуждается в Вашей помощи. Она должна создать микстуру из трёх различных компонент. Некоторые из компонент нельзя смешивать друг с другом. В частности, две компоненты с метками \(a\) и \(b\) могут присутствовать в одной микстуре, только если \(a \oplus b \le K\) (\(1 \le K \le 10^9\)).

Замечание: Здесь, \(a\oplus b\) обозначает побитовое исключающее ИЛИ неотрицательных целых чисел \(a\) и \(b\). Эта операция эквивалентна сложению соответствующих пар битов по модулю 2 и игнорированию переноса. Например

\[0\oplus 0=1\oplus 1=0,\]
\[1\oplus 0=0\oplus 1=1,\]
\[5\oplus 7=101_2\oplus 111_2=010_2=2.\]

У Беси есть \(N\) (\(1\le N\le 2\cdot 10^4\)) ящиков с компонентами. \(i\)-ый ящик содержит компоненты с номерами от \(l_i\) до \(r_i\) включительно \((0\le l_i \le r_i \le 10^9)\). Никакие два ящика не содержат одинаковые компоненты. Беси хочет узнать, сколько уникальных микстур из трёх различных компонент она может создать. Две микстуры рассматриваются как различные, если хотя бы одна компонента есть в одной микстуре и отсутствует в другой. Ответ выводите по модулю \(10^9 + 7\).

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит два целых числа \(N\) и \(K\).

Каждая из последующих \(N\) строк содержит два разделённых пробелом целых числа \(l_i\) и \(r_i\). Гарантируется, что ящики даются в порядке возрастания содержимого. а именно , \(r_i<l_{i+1}\) для каждого \(1\le i<N\).

ФОРМАТ ВЫВОДА (на экран / stdout):

Количество микстур из трёх различных компонент, которые Беси может создать по модулю \(10^9 + 7\).

SCORING

  • В тестах 3-4 \(\max(K,r_N)\le 10^4\).
  • В тестах 5-6 \(K=2^k-1\) для некоторого целого \(k\ge 1\).
  • В тестах 7-11 \(\max(K,r_N)\le 10^6\).
  • В тестах 12-16 \(N\le 20\).
  • В тестах 17-21 нет дополнительных ограничений.

Автор: Benjamin Qi

На Новый год Фермер Джон решил подарить своим коровам праздничное двоичное дерево поиска (BST)

Чтобы сгенерировать это BST, ФД начинает с перестановки \(a=\{a_1,a_2,\ldots,a_N\}\) целых чисел \(1\ldots N\), где \(N\le 300\). Затем он выполняет следующий псевдокод с аргументами \(1\) and \(N\).

generate(l,r):
  if l > r, return empty subtree;
  x = argminl <= i <= r ai; // index of min ai in {al,...,ar}
  return a BST with x as the root, 
    generate(l,x-1) as the left subtree,
    generate(x+1,r) as the right subtree;

Например, перестановка \(\{3,2,5,1,4\}\) сгенерирует такое BST

    4
   / \
  2   5
 / \ 
1   3

Пусть \(d_i(a)\) обозначает глубину вершины \(i\) в дереве, соотвествующем \(a\), то есть количество вершин на пути из \(a_i\) к корню. В примере выше, \(d_4(a)=1, d_2(a)=d_5(a)=2,\) and \(d_1(a)=d_3(a)=3\).

Количество инверсий \(a\) равно количеству пар целых чисел \((i,j)\), таких что \(1\le i<j\le N\) и \(a_i>a_j\). Коровы знают, что \(a\), которую ФД использовал для генерации BST, имеет ровно \(K\) инверсий \((0\le K\le \frac{N(N-1)}{2})\). Среди всех перестановок \(a\), удовлетворяющих этому условию, вычислите Остаток, когда \(\sum_ad_i(a)\) поделено на \(M\) для каждого \(1\le i\le N\).

ФОРМАТ ВВОДА (файл treedepth.in):

Единственная строка ввода содержит три разделённых одиночными пробелами целых числа: \(N, K\), \(M\), за которыми идёт перевод строки. \(M\) будет простым числом в интервале \([10^8,10^9+9]\).

ФОРМАТ ВЫВОДА (файл treedepth.out):

Выведите \(N\) разделённых одиночными пробелами целых чисел, обозначающих \(\sum_ad_i(a)\pmod{M}\) для каждого \(1\le i\le N.\)

ОЦЕНИВАНИЕ (по группам) :

  • Тесты 3-4 удовлетворяют \(N\le 8.\)
  • Тесты 5-7 удовлетворяют \(N\le 20.\)
  • Тесты 8-10 удовлетворяют \(N\le 50.\)

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

Ферма Джона построена вдоль длинной прямой дороги, поэтому любое место фермы может быть описано его позицией на этой дороге (точка на числовой прямой). Телепортер описывается двумя числами \(x\) и \(y\), которые обозначают, что навоз из точки \(x\) может быть мгновенно телепортирован в точку \(y\).

ФД решил построить телепортер с первой конечной точкой расположенной в \(x=0\); Ваша задача помочь ему определить наилучший выбор для другой конечной точки \(y\). В частности, имеется \(N\) лотков с навозом на ферме (\(1 \leq N \leq 100,000\)). \(i\)-ый лоток нужно переместить с позиции \(a_i\) в позицию \(b_i\) и ФД транспортирует каждый лоток отдельно от других. Обозначим \(d_i\) расстояние,на которое нужно перевезти каждый лоток. \(d_i\) может быть потенциально меньше, если ФД использует телепортер (везя на тракторе от \(a_i\) до \(x\) и затем от \(y\) до \(b_i\)).

Пожалуйста, помогите ФД определить минимально возможную сумму \(d_i\) которую может достичь ФД, правильно выбрав значение \(y\) (второго конца телепорта). Одно и то же значение \(y\) используется для транспортировки всех лотков.

ФОРМАТ ВВОДА (файл teleport.in):

Первая строка ввода содержит \(N\). Каждая из последующих \(N\) строк содержит по два целых числа \(a_i\) и \(b_i\), в интервале \(-10^8 \ldots 10^8\). Все значения не обязательно различны.

ФОРМАТ ВЫВОДА (файл teleport.out):

Выведите одно число - минимальную сумму \(d_i\), которую может достичь ФД. Заметим, что это число может превысить 32-битное целое, поэтому нужно использовать больший тип данных, например "long long" в C/C++.


Беси возвращается домой после длительного путешествия, а Фермер Джон хочет встретить ее баннером "Welcome Home". Поле ФД представляет собой целочисленную решетку размером M*N (1 <= M, N <= 100,000). Левый нижний угол поля имеет координаты (0,0), правый верхний - координаты (M,N). В каждой целочисленной точке поля вкопан столб. Из этих (M+1) * (N+1) точек ФД должен выбрать две в качестве конечных точек баннера.
Баннер должен быть точно прямым. Это означает, что на отрезке прямой между столбами, которые ФД выберет, не должно быть других столбов Кроме того, ФД хочет, чтобы баннер имел длину не менее L и не более H (1 <= L <= H <= 150,000).
Посчитайте, сколько существует различных способов повесить баннер. Способ, в котором меняются точки начала и конца друг с другом, считается одним и тем же. Поскольку число может быть очень большим, выводите ответ по модулю B (1 <= B <=1,000,000,000).
Рассмотрим пример M = 2 и N = 2:
* * * * * * * * *
ФД хочет баннер с длиной от 1 до 3 метров включительно. Все способы подходят по длине, но 8 пар должны быть исключены: Farmer John wants the length of the banner to be between 1 and 3 inclusive.
(0, 0) и (2, 0): (1, 0) на отрезке между ними (0, 1) и (2, 1): (1, 1) на отрезке между ними (0, 2) и (2, 2): (1, 2) на отрезке между ними (0, 0) и (2, 2): (1, 1) на отрезке между ними (0, 0) и (0, 2): (0, 1) на отрезке между ними (1, 0) и (1, 2): (1, 1) на отрезке между ними (2, 0) и (2, 2): (2, 1) на отрезке между ними (0, 2) и (2, 0): (1, 1) на отрезке между ними
Таким образом, ответ = (к-во способов из 9 по 2) - 8 = 28 вариантов.
PROBLEM NAME: banner
Формат входных данных
* Строка 1: Пять разделенных пробелом целых чисел: M, N, L, H, B.
Формат выходных данных
* Строка 1: Одно целое число, обозначающее количество баннеров по модулю B
Алексей Юрьевич и Михаил Леонидович отправились на поезде в Троицк. По дороге к ним подсели вахтовик и дембель. После знакомства и небольших историй о себе вахтовик и дембель решили устроить Алексею Юрьевичу и Михаилу Леонидовичу тест «на мужика»: нужно решить непростую задачку по программированию.
Помогите Алексею Юрьевичу и Михаилу Леонидовичу пройти тест «на мужика».
Задан массив целых чисел a1,a2,...,an.
Стоимостью подотрезка массива 1 <= l <= r <= n назовем величину f(l,r) = sum(l,r) − xor(l,r), где sum(l,r) = al +al+1+...+ar, а xor(l,r) = al ⊕al+1 ⊕...⊕ar (⊕ здесь обозначает операцию XOR, побитовое исключающее «ИЛИ» чисел, подробнее в разделе «Замечание»).
Требуется найти подотрезок заданного массива с максимальным значением f(l,r). Если ответов несколько, то среди них нужно найти подотрезок с минимальной длиной, то есть минимальным значением r − l +1.
Входные данные
Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число t (1 <= t <= 104) — количество наборов входных данных. Далее следует описание наборов входных данных.
Первая строка каждого набора входных данных содержит единственное целое число n (1 <= n <= 105) — длину массива.
Вторая строка каждого набора входных данных содержит n целых чисел a1,a2,...,an (0 <= ai <= 109) — элементы массива.
Гарантируется, что сумма n по всем наборам входных данных не превосходит 2 · 105.
Выходные данные
Для каждого набора входных данных выведите два числа 1 <= l <= r <= n таких, что значение f(l,r) максимально по всем подотрезкам массива a, а длина r −l +1 минимальна. Если существует несколько правильных ответов, выведите любой из них.
 
Примеры
Входные данные Выходные данные
1 6
1
0
2
5 10
3
0 2 4
4
0 12 8 3
5
21 32 32 32 10
7
0 1 0 1 0 1 0
1 1
2 2
3 3
2 3
3 4
4 6

Замечание
Операция XOR двух чисел a и b — это битовая операция, которая применяется независимо к каждой паре соответствующих битов a и b. Эта операция представляет собой сложение по модулю 2. Вот её таблица истинности для пары битов:
a b a⊕b
0 0 0
0 1 1
1 0 1
1 1 0

В первом наборе входных данных f(1,1) = 1 − 1 = 0.
Во    втором    наборе    входных    данных    f(2,2)    =    10 − 10    =    0.    Заметим,    что f(1,2) = (10 + 5) − (10 ⊕ 5) = 0, но нам среди максимальных значений f(l,r) нужно найти подотрезок с минимальной длиной.
В четвертом наборе входных данных f(2,3) = (12+8) − (12 ⊕ 8) = 16.
В пятом наборе входных данных есть два правильных ответа, так как f(2,3) = f(3,4) и их длины равны.

 
Мало кто знает, но у Данилы Багрова и Татарина есть ещё один брат, неизвестный широкой публике. Проживает он тихо, мирно в Копейске, вдали от столичной суеты и назойливых папарацци.
Однажды Данила Багров и Татарин решили навестить своего брата. Приехав к нему домой в Копейск, Данила обнаружил в шкафу обширную коллекцию дисков различных рок-групп. На полках лежали диски «Nautilus Pompilius», «Би-2», «АукцЫона», «Смысловых галлюцинаций», «Агаты Кристи» и многих других. Однако Даниле не понравилось, как эти диски были разложены на полках.
Шкаф с полками можно представить в виде прямоугольника n×m, где в каждой клетке лежит один диск. Каждый диск описывается одним числом — некоторым номером группы, которая записала этот диск. Будем считать, что если два диска имеют одинаковое число, то их записала одна и та же группа, а если разные — то их записали разные группы.
Данила хочет добиться того, чтобы в каждом столбце все диски были записаны разными группами. Для этого он может сколько угодно раз переставлять диски произвольным образом на любой полке (то есть внутри любой строки), однако, запрещено менять местами диски с разных полок.
Помогите Даниле и скажите, можно ли такими действиями добиться того, чтобы в каждом столбце все диски были записаны разными группами.
Входных данные
В первой строке через пробел заданы два целых числа n и m — размеры шкафа (1 <= n,m <= 100).
В следующих n строках через пробел записаны m целых чисел ai,j — номер группы, которая записала диск, лежащий на i-й полке в j-м столбце (1<= ai,j <=109).
Выходные данные
В первой строке выведите Impossible, если Данила не может расставить всё так, чтобы в каждом столбце диски были записаны разными группами, и Possible, если такая расстановка возможна.
В случае, если Данила может добиться желаемого, выведите финальную расстановку дисков в шкафу. Если таких расстановок несколько, выведите любую из них.
 
Примеры
Входные данные Выходные данные
1 3 4
1 2 2 3
3 2 1 4
2 4 1 3
Possible
3 2 1 2
1 3 2 4
2 1 4 3
2 3 3
1 1 1
1 1 1
1 1 1
Impossible
Саша Белый давно планировал переехать в Кыштым. И вот настал день X. Саша собрал все свои вещи в ящики и вынес их на улицу. Ящики были распределены на n стопок, расположенных вдоль одной прямой, следующим образом: a1 ящиков в первой стопке стоят непосредственно у газели, a2 ящиков во второй стопке – правее первой на метр, следующие a3 еще через метр и т.д. Теперь Белому нужно переставить все ящики как можно ближе к газели, а именно, все ящики из второй, третьей и т.д. стопок должны быть переставлены в первую стопку к исходным a1 ящикам.
Саша за этот день уже очень устал. Но, к счастью, мимо проходили n мальчишек. Ребята согласились перенести ящики. Каждый из них, ввиду своей выносливости, переносит грузы следующим образом:
1. i-й мальчик проходится по стопкам, номера которых делятся на i, справа налево.
2. Он берет из первой стопки на своем пути ровно один ящик (эта стопка обязана быть непустой).
3. Пройдя i метров налево (то есть до следующей стопки, номер которой делится на i), он снова берет один ящик со стопки, рядом с которой он стоит (исходя из этого, в стопке  обязательно должен быть хотя бы один ящик), пройдя еще i метров налево он снова берет ящик и так далее.
4. Когда i-й мальчик доходит до стопки с номером i, он кладет все ранее взятые ящики в эту стопку.

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

Входные данные
В первой строке входных данных записано целое число n количество стопок ящиков (1 <= n <= 105).
Во второй строке через пробел записаны n целых чисел di количество ящиков в i-й стопке (1 <= di <= 109).
Выходные данные
Выведите YES, если существует способ, при котором ребята перенесут все ящики к газели в первую стопку, или NO, если такого способа нет.
Примеры
Входные данные Выходные данные
1 5
2 1 3 5 3
YES
2 4
1 5 2 3
NO

Замечание
В первом примере сначала второй мальчик пройдется два раза, таким образом перенеся два ящика из четвертой стопки во вторую. После этого шага d = (2,3,3,3,3). Потом первый мальчик пройдется 3 раза, перетащив все ящики в первую стопку.
Во втором примере мальчикам не удастся перенести все ящики в первую стопку.
 
Однажды после олимпиады по экономике Мише приснился очень красочный и необычный сон.
Мальчик оказался министром финансов Берляндии. Осознав свою значимость, он тут же решил произвести в стране реформу. Раньше в Берляндии использовались банкноты с номиналами 1, 10, 100 и 1 000 бурлей. Мише данная система показалась крайне банальной, поэтому он решил придумать что-то свое.
Мальчик выбрал два целых числа x и y (x ≤ y) и заявил, что теперь в Берляндии будут использоваться только банкноты с номиналами x, x + 1, x + 2, . . . , y бурлей. Вскоре реформа была принята и вступила в силу, однако населению страны это совсем не понравилось. Недовольства начались из-за того, что теперь, используя новые банкноты, можно было набрать далеко не любую сумму.
Например, если Мишей были выбраны числа x = 5 и y = 7, то невозможно набрать суммы 1, 2, 3 и 4 бурлей. Также не получится набрать суммы 8 и 9 бурлей. Если же выбрать числа x = y = 2, то невозможно будет набрать любую нечетную сумму.
Миша, находясь на грани увольнения, решил успокоить население Берляндии и предъявить такое минимальное число N, что при помощи новых банкнот возможно набрать любую сумму, начиная с N. Таким образом, должно быть возможно набрать суммы N бурлей, N + 1 бурлей, N + 2 бурлей, и так далее. Помогите Мише найти искомое число N и избежать увольнения.

Входные данные
В первой строке входных данных записано целое число x — минимальный номинал новых банкнот.
Во второй строке записано целое число y (1 ≤ x ≤ y ≤ 2 · 109 ) — максимальный номинал новых банкнот.

Выходные данные
Выведите одно натуральное число N — минимальное число, такое, что при помощи банкнот с номиналами x, x + 1, x + 2, . . . , y можно набрать любую сумму, начиная с N бурлей. Если такого числа не существует, в качестве ответа выведите −1.

 
Примеры
Входные данные Выходные данные Пояснение
1 5
7
10 Имеются банкноты трех номиналов: 5, 6 и 7 бурлей. Ниже перечислены суммы,
которые можно набрать при помощи данных банкнот:
• 5 = 5,
• 6 = 6,
• 7 = 7,
• 10 = 5 + 5,
• 11 = 5 + 6,
• 12 = 5 + 7,
• 13 = 6 + 7,
• . . .
Можно показать, что при помощи банкнот данных номиналов возможно набрать любую сумму, начиная с 10 бурлей.
2 2
2
-1 Есть банкноты всего одного номинала: 2 бурля. При помощи данных банкнот можно набрать только любую чётную сумму: 2, 4, 6, .... Таким образом, искомого числа N не существует.
3 1900000000
2000000000
36100000000  
Персонаж известной компьютерной игры Марио постарел и почти перестал прыгать. Но совсем недавно он увидел спуск из N ступенек, и его накрыло ностальгией. Марио встал на самую верхнюю ступеньку и решил преодолеть этот спуск при помощи прыжков.
Когда-то Марио знал тысячи различных видов прыжков, но теперь он смог вспомнить только два: короткие и длинные. Короткий прыжок позволяет спуститься на произвольное число ступенек, не большее X, а длинный — на произвольное число, не большее Y (X < Y ). Но в силу возраста Марио не может делать два длинных прыжка подряд и вынужден между ними совершать хотя бы один короткий. При этом Марио не хочет слишком уж сильно ухудшить свои прошлые результаты и поэтому постарается обойтись как можно меньшим числом прыжков.
Помогите Марио посчитать минимальное количество прыжков, требующееся для преодоления всех N ступенек.

Входные данные
В первой строке входных данных записано целое число X — максимальная длина короткого прыжка.
Во второй строке записано целое число Y (1 ≤ X < Y ≤ 1018) — максимальная длина длинного прыжка.
В третьей строке записано целое число N (1 ≤ N ≤ 1018) — количество ступенек в спуске.

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

Примеры
Входные данные Выходные данные
1 2
3
5
2
2 1
2
4
3
3 1
100
1000000000000000000
19801980198019801


Замечание
На изображениях ниже приведены возможные способы решения первых двух тестов из условия:
Поделиться
Класснуть