жадные алгоритмы

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

В банкомате имеется неограниченный запас купюр номиналами \(1, 5, 10, 50, 100, 500, 1000\) и \(5000\) рублей. Клиент хочет снять со счёта сумму в \(N\) рублей и получить её наличными.

Банкомат настроен так, чтобы выдавать клиенту как можно меньше купюр в сумме — это экономит физические купюры в кассете. Разумеется, выданные купюры должны в сумме составлять ровно \(N\) рублей.

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

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

Одно целое число \(N\) (\(0 \le N \le 10^9\)) — сумма, которую нужно выдать.

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

Одно целое число — минимальное количество купюр.

Примечание

В первом примере \(6250 = 5000 + 1000 + 100 + 100 + 50\) — итого 5 купюр.

Во втором примере \(N = 0\) — клиент снимает ноль рублей, купюр не нужно выдавать вообще.

Коровы Фермера Джона стоят в различных точках \((x_1, y_1) \ldots (x_n, y_n)\) его поля (\(1 \leq N \leq 1000\), все \(x_i\) и \(y_i\) - положительные нечётные целые числа, не превышающие \(1,000,000\). ФД хочет разделить своё поле изгородью бесконечной длины с севера на юг, описываемой уравнением \(x=a\) (\(a\) - чётное целое, так обеспечивается, что изгородь не пройдёт через позицию ни одной коровы). Также он хочет построить изгородь бесконечной длины с востока на запад, которая описывается уравнением \(y=b\), где \(b\) - чётное целое. Эти две изгороди пересекаются в точке \((a,b)\), и вместе делят поле на четыре региона.

ФД хочет выбрать \(a\) и \(b\) так, чтобы получить "сбалансированное" количество коров во всех регионах, т.е. чтобы не было региона, который содержит слишком много коров. Пусть \(M\) - максимальное количество коров в этих четырёх регионах, ФД хочет, чтобы \(M\) было как можно меньше. Помогите ФД определить это минимально возможное значение для \(M\).

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

Первая строка ввода содержит два целых числа, \(N\) и \(B\). Каждая из следующих \(n\) строк содержит местоположение одной коровы, указанное её координатами \(x\) и \(y\).

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

Выведите минимально возможное значение \(M\), которое может достичь ФД оптимальным расположением изгородей.

У Фермера Джона круглый амбар. Амбар состоит из кольца из \(n\) комнат, пронумерованных \(1 \ldots n\) по периметру (\(3 \leq n \leq 1,000\)). Каждая комната имеет двери в две соседние комнаты и одну дверь во внешний мир.

ФД хочет разместить ровно \(r_i\) коров в комнате \(i\) (\(1 \leq r_i \leq 1,000,000\)). Он планирует открыть \(k\) внешних дверей (\(1 \leq k \leq 7\)), через которые коровы будут входить в амбар. Каждая корова затем идёт по часовой стрелке, пока не добредёт до нужной комнаты. ФД хочет открыть двери так, чтобы все коровы вместе прошли как можно меньшее расстояние. Коровы предварительно могут собраться как им выгоднее перед этими незакрытыми дверями (эти перемещения не входят в общее расстояние, учитываемое в задаче). Определите минимальное суммарное расстояние, которое придётся пройти коровам, если ФД наилучшим образом выберет какие \(k\) открыть.

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

Первая строка ввода содержит \(n\) и \(k\). Последующие \(n\) строк содержат \(r_1 \ldots r_n\).

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

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

У Фермера Джона круглый амбар. Амбар состоит из кольца из \(n\) комнат, пронумерованных \(1 \ldots n\) по периметру (\(3 \leq n \leq 100\)). Каждая комната имеет двери в две соседние комнаты и одну дверь во внешний мир.

ФД хочет разместить ровно \(r_i\) коров в комнате \(i\) (\(1 \leq r_i \leq 1,000,000\)). Он планирует открыть \(k\) внешних дверей (\(1 \leq k \leq 7\)), через которые коровы будут входить в амбар. Каждая корова затем идёт по часовой стрелке, пока не добредёт до нужной комнаты. ФД хочет открыть двери так, чтобы все коровы вместе прошли как можно меньшее расстояние. Коровы предварительно могут собраться как им выгоднее перед этими незакрытыми дверями (эти перемещения не входят в общее расстояние, учитываемое в задаче). Определите минимальное суммарное расстояние, которое придётся пройти коровам, если ФД наилучшим образом выберет какие \(k\) открыть.

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

Первая строка ввода содержит \(n\) и \(k\). Последующие \(n\) строк содержат \(r_1 \ldots r_n\).

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

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

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

Но построить робо-корову - дело непростое. Имеется \(N\) (\(1 \leq n \leq 100,000\)) индивидуальных позиций на роботе, в которых должны размещаться микроконтроллеры. Один микроконтроллер должен разместится в одном месте. Для каждого из этих мест Бесси может выбрать микроконтроллер из различных моделей, которые отличаются по цене.

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

Беси хочет сделать своё стадо как можно дешевле. Помогите ей определить минимальную стоимость сделать это.

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

Первая строка ввода содержит \(N\) и \(K\) разделённые одним пробелом.

Следующие \(N\) строк содержат описание различных микроконтроллеров доступных для каждого месте. \(i\)-ая такая строка начинается с \(M_i\) (\(1 \leq M_i \leq 10\)), определяющего количество моделей микроконтроллеров доступных для места \(i\). Затем следуют \(M_i\) разделённых одиночными пробелами целых чисел \(P_{i,j}\), определяющих стоимость этих моделей (\(1 \le P_{i,j} \le 100,000,000\)).

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

Выведите одну строку - минимальную стоимость сконструировать \(K\) роботов.

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

Беси проходит тест вида да/нет из \(N\) вопросов (\(1\le N\le 2\cdot 10^5\)). За \(i\)-ый вопрос она может добавить \(a_i\) баллов если ответит правильно, и отнять \(b_i\) баллов, если ответит неправильно или не изменить сумму, если не ответит вообще на вопрос (\(0<a_i,b_i\le 10^9\)).

Беси знает ответы на все вопросы, но боится, что администратор теста Эльза подменит до \(k\) вопросов так, чтоб получилось, что Беси ответила неправильно.

Заданы \(Q\) (\(1\le Q\le N+1\)) кандидатов величин \(k\) (\(0\le k\le N\)), определите количество баллов, которые Беси гарантированы для каждого \(k\), зная, что она должна ответить не менее чем на \(k\) вопросов.

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

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

Каждая из следующих \(N\) строк содержит \(a_i\) и \(b_i\).

Каждая из следующих \(Q\) строк содержит значение \(k\). Ни одно из значений \(k\) не появится более одного раза.

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

Выведите ответ для каждого \(k\) на отдельной строке.

\(N\) \((1 \leq N \leq 10^5)\) коров Фермера Джона выстроены в ряд. \(i\)-ая корова имеет метку \(a_i\) (\(1 \leq a_i \leq N\)). Группа коров может сформировать дружескую группу, если все они имеют одну и ту же метку и каждая корова находится в пределах \(x\) коров от остальных коров группы, где \(x\) - целое число из интервала \([1,N]\). Каждая корова должна быть точно в одной дружеской группе.

Для каждого \(x\) от \(1\) до \(N\), посчитайте минимальное количество дружеских групп, которые могу быть сформированы.

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

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

Следующая строка содержит \(a_1 ... a_N\), метки каждой из коров.

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

Для каждого \(x\) от \(1\) до \(N\), выведите минимальное количество дружеских групп для каждого \(x\) в отдельной строке.

Фермер Джон пытается описать свой любимый USACO-контест Эльзе, но она не понимает, почему он любит так сильно.

ФД загрузил контест как текстовый файл и старается объяснить, что он имеет ввиду. Контест определяется как строка маленьких латинских букв длины \(N\) (\(3 \leq N \leq 20\,000\)). "moo" определяется как подстрока \(c_ic_jc_j\) где за некоторым символом \(c_i\) следуют два символа \(c_j\), где \(c_i \neq c_j\). По словам фермера Джона, Беси много мычит, поэтому, если какое-то мычание появляется хотя бы \(F\) (\(1\le F\le N\)) раз в контесте, это может быть от Бесси.

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

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

Первая строка содержит \(N\) и \(F\), представляющие длину строки и порог частоты moo от Беси.

Вторая строка содержит строку маленьких латинских букв длиной \(N\), представляющую контест.

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

Выведите количество различных moo, которые Беси сделала, за которым последует лексикографически упорядоченный список moo. Каждое moo появляется на отдельной строке.

Leaders#90212

У Фермера Джона есть \(N\) коров (\(2 \leq N \leq 10^5\)). Каждая корова имеет породу Guernsey или Holstein. Коровы стоят в ряд пронумерованные \(1 \ldots N\).

Каждая корова записала свой список коров. А именно, список коровы \(i\) содержит диапазон коров, начиная с неё самой (коровы \(i\)) и до коровы \(E_i\) (\(i \leq E_i \leq N\)) включительно.

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

Помогите ФД посчитать количество пар коров, которые могут быть лидерами. Гарантируется, что имеется, как минимум, одна возможная пара.

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

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

Вторая строка содержит строку длиной \(N\), в который \(i\)-ый символ обозначает породу \(i\)-ой коровы (G для Guernsey и H для Holstein).

Третья строка содержит \(E_1 \dots E_N\).

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

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

Коровы Фермера Джона имеют высоты \(1, 2, \ldots, N\). Однажды выстроились в ряд в некотором порядке для игры в фрисби. Пусть \(h_1 \ldots h_N\) обозначают высоты этих коров в заданном порядке (поэтому \(h\)'-ки есть перестановка чисел \(1 \ldots N\)).

Две коровы на позициях \(i\) и \(j\) в строке могут успешно бросить фрисби друг другу, если и только если все коровы между ними имеют рост меньше чем \(\min(h_i, h_j)\).

Вычислите сумму расстояний между всеми парами позиций \(i<j\), которые ограничены парой коров, которые могут бросить которые могу успешно бросать фрисби друг другу. Расстояние между позициями \(i\) и \(j\) есть \(j-i+1\).

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

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

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

Выведите сумму расстояний для всех пар позиций в которых коровы могут бросить фрисби друг другу. Для ответа используйте 64-битное целое (например, "long long" в C/C++).

Беси хочет посмотреть Bovine Genomics: The Documentary, но она не хочет идти одна. К сожалению, её друзья не очень хотят идти с ней. Ей нужно чем то их привлечь. У неё есть два инструмента : mooney и мороженое.

У Беси \(N\) (\(1 \le N \le 2000\)) друзей. Однако они разные! Друг \(i\) имеет счёт популярности \(P_i\) (\(1 \le P_i \le 2000\)), и Беси хочет максимизировать сумму популярности друзей, которые пойдут с ней. Друг \(i\) пойдёт с ней только если она даст ему \(C_i\) (\(1 \le C_i \le 2000\)) "moonies". Друг \(i\) также может сделать скидку в \(1\) "mooney", если она даст ему \(X_i\) (\(1 \le X_i \le 2000\)) мороженых. Беси может получить сколько угодно скидок.

У Беси есть \(A\) moonies и \(B\) мороженых (\(0 \le A, B \le 2000\)). Помогите ей определить максимальную сумму популярностей, которую она может добиться, если потратит mooney и мороженое оптмально.

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

Строка \(1\) содержит три числа \(N\), \(A\), \(B\), представляющих количества друзей, mooney и мороженых, которые есть у Беси соответственно.

Каждая из последующих \(N\) строк содержит три числа \(P_i\), \(C_i\), \(X_i\), представляющих популярность (\(P_i\)), mooney, за которые он согласится пойти, количество мороженых для скидки в \(1\) mooney для друга \(i\) (\(X_i\)).

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

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

Ферма Джона состоит из \(N\) пастбищ (\(1 \leq N \leq 10^5\)), соединённых \(N-1\) дорогой, так что любое пастбище достижимо из любого другого. То есть ферма представляет собой дерево.

ФД хочет разбить множество дорог на несколько путей. Его не беспокоит количество путей. Однако он хочет чтобы все эти пути максимально возможными.

Помогите ФД определить максимальное положительное целое \(K\) такое, что дороги могут быть разделены на пути длины не менее \(K\).

ОЦЕНИВАНИЕ:

  • В тестах 2-4 дерево формирует звезду; не более чем одна вершина имеет степень больше чем 2.
  • В тестах 5-8 \(N\le 10^3\).
  • В тестах 9-15 нет дополнительных ограничений.

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

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

Каждая из следующих \(N-1\) строк содержит по два целых числа \(a\) и \(b\), описывающих ребро между вершинами \(a\) и \(b\). Оба числа \(a\) и \(b\) в интервале \(1 \ldots N\).

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

Выведите \(K\).

Каждый день скоростной поезд проносится мимо фермы. У него имеется \(N\) вагонов (\(1 \leq N \leq 10^5\)), помеченных положительным целым числом от 1 до \(10^9\); различные вагоны могут иметь одинаковые метки.

Обычно Беси наблюдает как едет поезд, отслеживая метки вагонов. Однако сегодня туман, и Беси не видит метки. К счастью, она приобрела скользящее окно минимумов последовательности меток. В частности, у неё есть положительное целое число \(K\), и \(N-K+1\) положительных целых чисел \(c_1,\dots,c_{N+1-K}\), где \(c_i\) - минимальная метка среди вагонов \(i, i+1, \dots, i+K-1\).

Помогите Беси вычислить количество способов назначить метку каждому вагону соответствующую показаниям "скользящего окна минимумов". Поскольку это число может быть очень большим, выведите ответ по модулю \(10^9 + 7\).

Гарантируется, что существует, как минимум, один способ так назначить метки.

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

Первая строка содержит два разделённых пробелом целых числа \(N\) и \(K\). Следующие строки содержать минимумы скользящего окна \(c_1,\dots,c_{N+1-K}\), по одному в строке.

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

Одно целое число: количество способов по модулю \(10^9 + 7\), назначить положительные целые, не превышающие \(10^9\) каждому вагону, так что минимальная метка среди вагонов \(i, i+1, \dots, i+K-1\) есть \(c_i\) для всех \(1 \leq i \leq N-K+1\).

Беси хочет написать собственную поэму.

Беси знает \(N\) (\(1 \leq N \leq 5000\)) слов и хочет организовать их в поэму. Она определила длину в слогах каждого слова, кроме того она распределила их в "классы рифм". Каждое слово рифмуется только с другими словами из этого же класса рифм.

Каждая из поэм Беси включает \(M\) строк (\(1 \leq M \leq 10^5\)) и каждая строка должна состоять из \(K\) (\(1 \leq K \leq 5000\)) слогов. Более того, поэм Беси должна соответствовать специфической схеме рифм.

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

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

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

Каждая из следующих \(N\) строк содержит два числа \(s_i\) (\(1 \leq s_i \leq K\)) и \(c_i\) (\(1 \leq c_i \leq N\)). Они обозначают, что Беси знает слово с длиной (в слогах) \(s_i\) и класса рифмы \(c_i\).

Последние \(M\) строк описывают желаемую схему рифмы Беси и каждая содержит одну большую букву \(e_i\). Все строки соответствующие \(e_i\) должны заканчиваться словами одного и того же кдасса рифм. Строки с различными значениями \(e_i\) не обязательно заканчиваются словами с различными классами рифм.

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

Выведите количество поэм, которые может Беси написать, удовлетворяющих все заданным ограничениям. Поскольку это число может быть очень велико, выводите ответ по модулю 1,000,000,007.

Meetings#90045
Два амбара расположены в позициях \(0\) и \(L\) \((1\le L\le 10^9)\) на одномерной числовой прямой. Также имеется \(N\) коров \((1\le N\le 5\cdot 10^4)\) в различных точках этой числовой прямой (и амбар и коровы представляем точками).

Каждая корова \(i\) изначально расположена в некоторой позиции \(x_i\) и двигается в положительном или отрицательном направлении со скоростью одна единица в секунду, представленной целым числом \(d_i\), которое равно либо \(1\) либо \(-1\).

Каждая корова имеет вес \(w_i\) в интервале \([1,10^3]\). Все коровы всегда движутся с постоянной скоростью, пока не произойдёт одно из следующих событий:

  • Если корова \(i\) достигает амбара, то она прекращает движение.
  • Поисходит встреча, когда две коровы \(i\) и \(j\) находятся в одной точке, которая не является амбаром. В этом случае корове \(i\) назначается скорость коровы \(j\) и наоборот. Заметим, что коровы могут встретится в точке, которая не является целым числом.

Пусть \(T\) - самое раннее время, когда сума весов всех коров, которые перестали двигаться (достигнув одного из амбаров) составляет как минимум половину суммы весов всех коров. Определите общее количеаство встреч между парами коров, которое состоится в интервале времени от \(0 \ldots T\) (включая время \(T\)).

ОЦЕНИВАНИЕ:

  • Тесты 2-4 удовлетворяют \(N\le 10^2\) и \(w_i=1\) для всех \(i.\)
  • Тесты 5-7 удовлетворяют \(N\le 10^2.\)

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

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

Каждая из последующих \(N\) строк содержит тра разделённых пробелом целых числа \(w_i\), \(x_i\), \(d_i.\) Все \(x_i\) различные и удовлетворяют \(0<x_i<L.\)

Формат вывода (файл meetings.out):

Выведите одно целое число - ответ задачи.

На ферме зима и много снега. Имеется \(N\) фрагментов на пути от фермы к амбару, последовательно пронумерованных \(1 \dots N\), и фрагмент \(i\) покрыт \(f_i\) футами снега.

В подвале у ФД имеется \(B\) пар ботов, пронумерованных \(1 \dots B\). Некоторые потяжелее, а некоторые полегче. Пара \(i\) позволяет ФД идти по снегу не более \(s_i\) футов глубиной и позволяет ФД сделать шаг длиной не более \(d_i\).

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

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

Первая строка содержит два разделённых пробелом целых числа \(N\) и \(B\) (\(1 \leq N,B \leq 10^5\)).

Вторая строка содержит \(N\) целых чисел, разделённых одиночными пробелами. \(i\)-ое число есть \(f_i\) - глубина снега на фрагменте \(i\) (\(0 \leq f_i \leq 10^9\)). Гарантируется, что \(f_1 = f_N = 0\).

Каждая из следующих \(B\) строк содержат два разделённых пробелом целых числа. Первое целое число есть \(s_i\) - максимальная глубина снега, в которую может ступить пара \(i\). Второе целое число есть \(d_i\) - максимальный размер шага для пары \(i\). Гарантируется, что \(0 \leq s_i \leq 10^9\) и \(1 \leq d_i \leq N-1\).

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

Вывод должен состоять из \(N\) строк. Строка \(i\) должна содержать одно целое число \(1\), если ФД может пройти от фрагмента \(1\) до фрагмента \(N\) надев \(i\)-ую пару ботинок, и \(0\) в противном случае.


Ферма Джона разделена на N x N квадратов пастбищ (2<=N<=15). Снаружи есть изгородь, но между пастбищами коровы могут переходить свободно.
ФД решил построить изгороди, чтобы отделить коров друг от друга. Каждая изгородь может быть горизонтальной или вертикальной через всю ферму, и изгороди не могут проходить через пастбища. По финансовым соображениям ФД может построить не более чем K изгородей (1 <= K <= 2N - 2).
ФД хочет построить изгороди так, чтобы минимизировать размер наибольшей из получившихся в результате групп коров (две коровы находятся в одной группе, если они могут посетить друг друга, не пересекая никакую изгородь).
По заданным количествам коров на пастбищах, вычислите размер наибольшей группы коров, если ФД построит изгороди оптимально.

PROBLEM NAME: partition
Формат входных данных
* Строка 1: Два целых числа, N and K
* Строки 2..1+N: Имеется N чисел на каждой строке, описывающих количества коров в каждом пастбище одной строки фермы. На каждом пастбище не менее 0 и не более 1000 коров.


Формат выходных данных
* Строка 1: Минимально возможный размер наибольшей группы коров.
Примечание
ФД должен построить изгороди между колонками 2 и 3 и между строками 2 и 3. В результате получится 4 группы по 4 коровы в каждой.


Фермер Джон заставил N своих коров (1 <= N <= 100,000) бежать L раз по круглому треку длиной C. Все коровы начинают в одной точке трека и бегут с разными скоростями. Гонка заканчивается, когда самая быстрая корова достигнет финиша (пробежав общее расстояние LC).
ФД заметил несколько случаев, когда одна корова обгоняла другую, и хочет узнать, сколько раз такой обгон случился за все время гонки.
Более строго, событие для подсчета определяется парой коров (x,y) и временем t (меньшим или равным времени конца гонки), когда корова X обгоняла корову y в момент времени t. Помогите ФД подсчитать общее количество таких обгонов за все время гонки.
PROBLEM NAME: running
Формат входных данных
* Строка 1: Три разделенных пробелами целых числа: N, L, C. (1 <= L,C <= 25,000).
* Строки 2..1+N: Строка i+1 содержит скорость коровы i, целое число в диапазоне 1..1,000,000.
Формат выходных данных
* Строка 1: Общее количество обгонов во время гонки.
Примечание
Гонка длится 2 единицы времени, поскольку именно столько времени нужно самой быстрой корове (с номером 2) добраться до финиша. За это время случится 4 обгона: корова 2 обгонит коров 1 и 4, и корова 3 обгонит коров 1 и 4.

Фермер Джон хочет отслеживать свои N коров (1 <= N <= 50,000), используя свою новую систему наблюдения, которую он купил.
I-ая корова расположена в позиции (xi, yi) с целочисленными координатами (в диапазоне 0...1,000,000,000); никакие две коровы не расположены в одной и той же позиции.
Система наблюдения ФД имеет три специальные камеры, каждая из которых способна отслеживать всех коров вдоль некоторой вертикальной или горизонтальной оси. Пожалуйста, помогите ФД определить, возможно ли установить эти три камеры так, чтобы отслеживать всех его коров. То есть, Определите, могут ли все N позиций коров быть покрыты некоторым множеством из трех прямых, каждая из которых ориентирована горизонтально или вертикально.
Замечание: программы, которые не делают ничего, кроме угадывания ответа, могут быть дисквалифицированы.
PROBLEM NAME: 3lines
Формат входных данных
* Строка 1: Целое число N.
* Строки 2..1+N: Строка i+1 содержит разделенные пробелом целые числа xi yi , определяющие положение коровы i.
Формат выходных данных
* Строка 1: Выведите 1, ели возможно отслеживать всех коров тремя камерами и выведите 0 в противном случае.
Примечание
Прямые y=0, x=1, y=4 отслеживают все N коров.
Два неориентированных графа G и H называются изоморфными , если:
  • они имеют одинаковое количество вершин;
  • существует такое однозначное соответствие между их вершинами, что любые две различные вершины графа G соединены ребром тогда и только тогда, когда соединены ребром соответствующие вершины графа H.
Например, следующие два графа изоморфны, хотя выглядят по-разному:


 

Возможным однозначным соответствием, показывающим, что эти два графа изоморфны, является {a-1, b-6, c-8, d-3, g-5, h-2, i-4, j-7}, хотя существуют и другие подобные соответствия.

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



Говорят, что граф G содержит другой граф H , если существует хотя бы один подграф H ’ графа G , который изоморфен H . Следующий рисунок показывает граф G , который содержит граф H .



ЗАДАНИЕ

По двум заданным неориентированным графам G и H постройте подграф G’ графа G такой, что:

количество вершин в графах G и G’ одинаково;
H не содержится в G’ .
Естественно, может быть много подграфов графа G’ с перечисленными свойствами. Постройте подграф с как можно большим количеством ребер.

БАЗОВЫЙ АЛГОРИТМ

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

ОГРАНИЧЕНИЯ

3 ≤ m ≤ 4    m – количество вершин в H.
3 ≤ n ≤ 1000    n – количество вершин в G .

ВВОД

Вы получите 10 тестов каждый со следующими данными:
 

Пример ввода

ОПИСАНИЕ

3 5
0 1 0
1 0 1
0 1 0
0 1 0 0 0
1 0 1 0 0
0 1 0 1 0
0 0 1 0 1
0 0 0 1 0

СТРОКА 1: Содержит два целых числа, разделенных пробелом, соответственно и n.

СЛЕДУЮЩИЕ СТРОККаждая строка содержит целых чисел, разделенных пробелами, и представляет одну вершину из в порядке 1, ..., -ый элемент -ой строки в этой секции равняется 1, если вершины и соединены ребром в , и равняется 0 в противном случае.

СЛЕДУЮЩИЕ СТРОК Каждая строка содержит целых чисел, разделенных пробелами, и представляет одну вершину из в порядке 1, ..., -ый элемент -ой строки в этой секции равняется 1, если вершины и соединены ребром в и равняется 0 в противном случае.

 

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

ВЫВОД

Вы должны создать 10 выводов по одному на каждый входной. Каждый тест должен содержать следующие данные:

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

ОПИСАНИЕ

#FILE forbidden K
5
0 1 0 0 0
1 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

СТРОКА 1: Заголовок файла. Заголовок файла должен содержать

#FILE forbidden K

где K – это число между 1 и 10, которое соответствует решенному входному файлу.

СТРОКА 2: Содержит одно целое число : .

СЛЕДУЮЩИЕ СТРОК Каждая строка содержит целых чисел, разделенных пробелом, и представляет одну вершину из G’ в порядке 1, ..., -ый элемент -ой строки в этой секции равняется 1, если вершины и соединены ребром в G’ , и равняется 0 в противном случае.

Заметьте, что за исключением строк 1 и 2, приведенные входные данные представляют собой матрицу смежности графа G’. Обратите внимание, что есть много вариантов ответа, и приведенный вариант является корректным, но не оптимальным.

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