Перебор

16 задачвместе с подтемами
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.
На уроке информатике Антон Витальевич задал придумать задачи на перестановки. Ребята в 43 кабинете очень обрадовались этому заданию и решили придумать n гробов для своего класса. Сложность каждой задачи – это число от 1 до n. Ребята хотят узнать насколько, они «загробили» контест, коэффициент «загробленности» (КЗ) считается, как номер перестановки, которую подали на ввод. Ребята радуются, если КЗ будет больше, чем сумма разниц между двумя подряд идущими элементами в данной перестановки по модулю умноженная на количество гробов в контесте.
 
Вывести “positumque loculum” (гроб), если ребята будут рады своей работе, иначе вывести наименьшую подходящую перестановку (элементы разделять пробелами), номер которой |КЗ – номер текущей| <= k, а если это невозможно, то вывести “easily”.
 
В первой строке вводится количество гробов в контесте n <= 7 и k, 0 <= k <= n!
 
Во второй строке вводится сама перестановка.
Ввод Вывод
7 2518
7 5 2 4 1 6 3
positumque loculum
4 1
3 2 4 1
easily
4 2
3 2 4 1
3 4 2 1


Приятного решения ♥♥
(с) Елизавета Ястреба

Вы с друзьями устроили марафон просмотра фильмов про отели, проголодались и решили заказать пиццу. Пока вы выбирали, с какого фильма начать просмотр, курьер с пиццей уже почти приехал. Вам пришло уведомление, что <<Курьер уже почти на месте>>, но прошло уже 5 минут, а пицца всё ещё не доставлена. Что же случилось?

Курьер действительно приехал по нужному адресу, но не может понять, действительно ли это тот отель, в который заказали пиццу. Вывеска отеля представляет из себя прямоугольник, состоящий из \(n\) строк по \(m\) заглавных латинских букв в каждой. И курьер не имеет ни малейшего понятия, где на ней написано название отеля.

Курьер попросил помощи у прохожего, на что тот ответил, что не помнит, как называется отель, зато знает, как найти название на вывеске. Он рассказал, что ещё совсем недавно у курьера не возникло бы проблем: на вывеске было только слово <<HOTEL>> и название отеля (также состоящее из 5 букв). Название начинается с буквы <<L>>, поэтому хозяин решил оформить вывеску так: он написал слово <<HOTEL>> так, чтобы соседние буквы граничили по стороне, а после этого так же (с тем же расположением букв относительно предыдущих) написал название, начав его с последней буквы слова <<HOTEL>>. Для лучшего понимания посмотрите, как могла бы выглядеть вывеска отеля с названием LUCKY:

image

Хозяину отеля так понравилось рисовать буквы, что он решил заполнить ими вообще все клетки матрицы-вывески. Чтобы у посетителя остался шанс найти название, хозяин вписал буквы так, чтобы ни в каком другом месте нельзя было прочитать слово <<HOTEL>>.

Зная всю эту информацию, курьер смог выяснить название отеля. А сможете ли вы?

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

В следующих \(n\) строках дана сама матрица-вывеска. Каждая из строк состоит из \(m\) заглавных букв латинского алфавита.

Гарантируется, что слово <<HOTEL>> встречается в матрице ровно один раз.

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

✓ 1✗ 11 200средняяВойти и решать

На плоскости отмечены несколько красных, синих и черных точек. Требуется покрасить каждую черную точку в красный или синий цвет так, чтобы сумма расстояний между всеми парами красных точек и расстояний между всем парами синих точек было минимальным. На вход подается csv-файл, в первой строке которого записаны заголовки столбцов: id,x,y,color

Входные данные
В каждой из остальных строк записана информация об одной из точек: id, x и y — целые числа, color — 0 для черных точек, 1 для красных точек и 2 для синих.

Общее количество точек не превосходит 15.

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

Примеры
Входные данные Выходные данные
1 id,x,y,color
1,1,0,1
2,2,0,2
3,3,0,0
4,4,0,0
4.0
✓ 2✗ 761 400средняяВойти и решать

Аня занимается рукоделием. Сегодня она решила связать платок из полупрозрачных ниток. Каждая нитка характеризуется единственным целым числом — коэффициентом прозрачности.

Платок делается по следующей схеме: выбираются горизонтальные нитки с коэффициентами прозрачности \(a_1, a_2, \ldots, a_n\) и вертикальные с коэффициентами прозрачности \(b_1, b_2, \ldots, b_m\). Затем они переплетаются между собой, как показано на картинке снизу, и образуют кусок ткани размера \(n \times m\), состоящий ровно из \(nm\) узлов:

image
Пример куска ткани при \(n = m = 4\).

После того, как сплетение затянется и не будет видно зазоров между нитками, каждый узел, образованный горизонтальной ниткой с номером \(i\) и вертикальной ниткой с номером \(j\), превратится в клетку, которую мы будем обозначать как \((i, j)\). Клетка \((i, j)\) будет иметь коэффициент прозрачности \(a_i + b_j\).

\(^{\dagger}\)Подквадратом куска ткани называется множество всех его клеток \((i, j)\), таких что \(x_0 \le i \le x_0 + d\) и \(y_0 \le j \le y_0 + d\) для некоторых целых чисел \(x_0\), \(y_0\) и \(d\) (\(1 \le x_0 \le n - d\), \(1 \le y_0 \le m - d\), \(d \ge 0\)).

Интересностью полученного платка будем называть количество его подквадратов\(^{\dagger}\), в которых нет пары соседних по горизонтали или по вертикали клеток с одинаковыми коэффициентами прозрачности.

Аня ещё не решила, из каких ниток плести платок, поэтому вам будут даны также \(q\) запросов изменения коэффициентов прозрачности ниток на некотором отрезке, после каждого из которых надо вывести интересность полученного платка.

Формат входных данных
Первая строка содержит три целых числа \(n\), \(m\) и \(q\) (\(1 \le n, m \le 300\,000\), \(0 \le q \le 300\,000\)) — количество горизонтальных ниток, количество вертикальных ниток и количество запросов изменения.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — коэффициенты прозрачности для горизонтальных ниток, нитки пронумерованы сверху-вниз.

Третья строка содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(-10^9 \le b_i \le 10^9\)) — коэффициенты прозрачности для вертикальных ниток, нитки пронумерованы слева-направо.

В последующих \(q\) строках указаны запросы изменения. Каждый из запросов описывается четверкой целых чисел \(t\), \(l\), \(r\) и \(x\) (\(1 \le t \le 2\), \(l \le r\), \(-10^9 \le x \le 10^9\)). В зависимости от параметра \(t\) в запросе требуется сделать следующее:

  • \(t=1\). Коэффициенты прозрачности для горизонтальных ниток на отрезке \([l, r]\) увеличиваются на \(x\) (иными словами, для всех целых \(l \le i \le r\) значение \(a_i\) увеличивается на \(x\));

  • \(t=2\). Коэффициенты прозрачности для вертикальных ниток на отрезке \([l, r]\) увеличиваются на \(x\) (иными словами, для всех целых \(l \le i \le r\) значение \(b_i\) увеличивается на \(x\)).

Формат выходных данных
Выведите \((q+1)\) строку. В \((i + 1)\)-й строке (\(0 \le i \le q\)) выведите одно целое число — интересность платка после применения первых \(i\) запросов.


Примечание
В первом примере коэффициенты прозрачности клеток в получившемся платке равны:

2 3 3 4
2 3 3 4
3 4 4 5
4 5 5 6

Тогда есть следующие подквадраты, не содержащие двух соседних по вертикали или по горизонтали клеток с одинаковым коэффициентом прозрачности:

  • Каждая из \(16\) клеток по отдельности;

  • Подквадрат с левым верхним углом в клетке \((3, 1)\) и правим нижним углом в клетке \((4, 2)\);

  • Подквадрат с левым верхним углом в клетке \((2, 3)\) и правим нижним углом в клетке \((3, 4)\);

  • Подквадрат с левым верхним углом в клетке \((2, 1)\) и правым нижним углом в клетке \((3, 2)\);

  • Подквадрат с левым верхним углом в клетке \((3, 3)\) и правим нижним углом в клетке \((4, 4)\).

Во втором примере после первого запроса коэффициенты прозрачности горизонтальных ниток равны \([1, 2, 2]\). После второго запроса коэффициенты прозрачности вертикальных ниток равны \([2, -4, 2]\).

Головоломка состоит из \(n\) треугольников. Чтобы решить головоломку, необходимо выбрать из них четыре треугольника и собрать из них большой треугольник по следующей схеме:

Треугольники не должны пересекаться, в объединении они должны давать треугольник. Ровно по одному из выбранных треугольников должны находиться в углах, а один треугольник должен располагаться в центре.

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

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

Формат входных данных
В первой строке дано одно целое число \(t\) — номер теста.

В второй строке дано одно целое число \(n\) — количество треугольников в головоломке (\(4 \le n \le 30\)).

В следующих \(n\) строках дано описание треугольников. Один треугольник описывается координатами трех своих углов, данных в порядке обхода треугольника против часовой стрелки. Все координаты целые и по модулю не превышают \(10^5\). Гарантируется, что треугольники не являются вырожденными. В исходном расположении треугольники могут пересекаться.

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

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

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

Во втором примере все треугольники имеют одинаковую форму прямоугольного треугольника с длинами катетов равными \(1\). Из любых четырех треугольников можно собрать один.

Множество \(A = \{a_1, a_2, \ldots, a_k\}\) различных натуральных чисел с суммой \(a_1+a_2+\ldots+a_k=n\) называется генератором квадратов, если сумма любых \(k-1\) элементов этого множества является полным квадратом целого числа.

Например, множество \(\{1, 22, 41, 58\}\) является генератором квадратов, так как \(1 + 22 + 41 = 64 = 8^2\), \(1 + 22 + 58 = 81 = 9^2\), \(1 + 41 + 58 = 100 = 10^2\), \(22 + 41 + 58 = 121 = 11^2\).

По заданным \(n\) и \(k\) постройте множество из \(k\) различных натуральных чисел с суммой \(n\), которое является генератором квадратов, либо выясните, что такого нет.

Формат входных данных
На ввод подаются два целых числа \(n\) и \(k\) (\(2 \le n \le 200\,000\), \(2 \le k \le 30\)).

Формат выходных данных
Если искомый генератор квадратов существует, выведите <<YES>> на первой строке, а на второй строке выведите \(k\) натуральных чисел "— искомое множество.

Если генератора квадратов с заданными параметрами не существует, выведите <<NO>>.

 

N коров (1 ≤ N ≤ 105) Фермера Джона стоят в ряд. i-ая корова слева имеет метку i (1 ≤ i ≤ N).
ФД дал коровам M пар целых чисел s (L1,R1)…(LM,RM), где 1 ≤ M ≤ 100. Затем он сказал коровам повторить ровно K (1 ≤ K ≤ 109) раз процесс из M шагов:

Для каждого i от 1 до M:
Последовательность коров на позициях Li…Ri слева реверсивно меняют свой порядок.
Выведите метки всех коров слева направо для каждого i, (1 ≤ i ≤ N) после завершения описанного процесса.

Входные данные
Первая строка содержит числа N, M, K. Для каждого 1 ≤ i ≤ M строка i+1 содержит Li и Ri, два целых числа в интервале 1…N, где Li<Ri.

Выходные данные
На i-ой строке вывода, выведите i-ый элемент массива после выполнения всех инструкций K раз.
Примеры
Входные данные Выходные данные Пояснение
1
7 2 2
2 5
3 7
1
2
4
3
5
7
6
Изначально порядок коров слева направо такой     [1,2,3,4,5,6,7] 
После первого шага процесса порядок станет таким [1,5,4,3,2,6,7]
После второго шага процесса порядок станет таким [1,5,7,6,2,3,4]. 
Повторив оба шага ещё раз получим результат, приведенный в выводе.
Фермер Джон продолжает заботиться о здоровье своих коров, последовательно пронумерованных 1…N.
Недавно ФД проверил их всех и выяснил, что некоторые из них больны. Используя видео из амбара, ФД может узнать какие пары коров взаимодействовали распространяя при этом болезнь. ФД собрал список с указанием времени, в которое происходило взаимодействие пар коров в видео (t,x,y), означающем, что в момент времени t корова x взаимодействовала с коровой y. Также ФД знает следующее:
  1. Ровно одна корова была инфицирована изначально (нулевой пациент).
  2. После того, кaк корова инфицирована, она передаёт инфекцию её следующим K взаимодействиям (возможно включая одного и того же партнера несколько раз). После K раз передачи инфекций, она перестаёт передавать инфекцию (осознав что заражает, она начинает тщательно мыть копыта).
  3. Однажды заболев, она остаётся больной.

К несчастью, ФД не знает, какая из его N коров, является "нулевым пациентом", кроме того он не знает значение K!. Помогите ему сузить диапазоны этих неизвестных, основываясь на его данных. Гарантируется, что ответ существует.

Входные данные
Первая строка ввода содержит N (2<= N <=100) и T (1 <= T <= 250). Следующая строка содержит строку длиной N, состоящую из 0 и 1, описывающую текущее состояние N коров ФД, 0 - здорова, 1 - больна. Каждая из последующих T строк описывает запись из списка взаимодействий ФД, и состоит из трёх чисел, t,x,y, где t - положительное целое время взаимодействия (t <= 250), x и y - различные целые в интервале 1…N, указывающее какие коровы взаимодействовали в момент времени T. В один момент времени T происходит не более одного взаимодействия.

Выходные данные
Выведите одну строку, содержащую три целых числа x,y,z, где x - количество различных коров, которые могли быть "нулевым пациентом", y - минимально возможное значение K, подходящее к исходным данным, z - наибольшее возможное значение K, подходящее к исходным данным. Если для K нет верхней границы, выведите "Infinity" для z. Заметим, что возможно K=0.
 
Примеры
Входные данные Выходные данные
1 4 3
1100
7 1 2
5 2 3
6 2 4
1 1 Infinity
К Коле на день рождения придут n друзей.
По этому случаю он заготовил n бутылок различных напитков, а каждый из друзей принесет свой стакан.

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

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

 Входные данные
В первое строке дано число t - число тестовых наборов (1≤t≤100).
Каждый тестовый набор задается тремя строками. В первой из них дано число ni - число стаканов и бутылок напитков в i-ом наборе (1≤ni≤105).
Во второй строке даны ni чисел bi,j - объемы стаканов в i-м наборе (1≤ai,j,bi,j≤100).
В третьей строке заданы ni чисел ai,j - объемы бутылок в i-м наборе.
Гарантируется, что сумма ni по всем тестовым наборам не превосходит 3⋅105.

Выходные данные
Для каждого тестового набора выведите одно число - число способов разлить напитки по стаканам друзей так, чтобы все напитки полностью поместились в стаканы, взятое по модулю 1 000 000 007.
 
Примеры
Входные данные Выходные данные Пояснение
1 3
3
1 1 1
1 2 1
5
1 2 3 4 5
1 2 3 4 5
3
2 2 2
2 1 2
0
1
6
В первом тестовом наборе второй напиток не помещается ни в один стакан, поэтому ответ будет ноль. Во втором тестовом наборе, существует лишь один способ разлить напитки. В третьем наборе любой напиток можно налить в любой стакан.
Имеется клетчатое поле размером NxM. В каждой клетке может лежать либо реактив A, либо B, либо ничего не лежать - 0. За ход можно положить в некоторую клетку реактив A, причем преобразование вещества идет по следующему правилу: 0+A->A, A+A->B, B+A->0. При этом в результате последней реакции происходит взрыв, а в соседние непустые клетки по сторонам света (если они есть), попадает по порции реактива A. Очки за ход = количество взрывов минус 1. Очки за отдельные ходы суммируются. Требуется очистить поле и при этом набрать максимальное количество очков.
 
Входные данные
В первой строке вводятся N и M (1 <= N, M <= 3). Далее идут N строк по M символов из алфавита (0, A, B) - описание поля.
 
Выходные данные
Выведите единственное число - максимальное количество очков, которое можно набрать.
 
Комментарий ко второму примеру: за первый ход не произошло ни одного взрыва, очки=0-1=-1; за второй ход произошел один взрыв и поле очистилось, очки=1-1=0; итого очков: 0+(-1)=-1

Ввод Вывод
1 1
0
0
1 1
A
-1

Самой инновационной разработкой "British Scientists, Inc" является способ нахождения решения для любой задачи, которую возможно решить с помощью тильда-омега-лямбда-исчисления (то есть, для никакой). Для этого они перебирают все возможные скобочные последовательности длины x, где х - первая цифра секретной константы, использующейся во многих разработках компании. Если x нечётное, они просто прибавляют к нему единицу. Потом они используют продвинутые алгоритмы, использующие нейролингвистическое программирование и вычисленные по спирали Фибоначчи числа Каталана гуголдцатого порядка для определения местонахождения термов. Но эти алгоритмы уже реализованы и запатентованы. 

Ваша же задача - реализовать алгоритм перебора. 


Входные данные
На вход подаётся первая цифра секретной константы - x (\(1 <= x <= 9\)). 
 

Выходные данные
Нужно вывести все ПСП длины x (или x+1, если \(x \% 2 ==1\)) в лексикографическом порядке.

 

Примеры
Входные данные Выходные данные
1 1
( )
[ ]
{ }
Меллерт Гихаил сегодня был в прекрасном настроении до того, как его одноклассник Фусков Кедор не заговорил о политике. Гихаил очень сильно разозлился, поэтому придумал задачу по информатике для Кедора, чтобы тот начал решать и наконец-то заткнулся. 
Задача была такая:  “Существует n логических функций, которые зависят от одного и того же множества переменных. Даны n чисел, битовое представление которых определяет таблицу истинности для каждой функции. Вам необходимо найти такой порядок расположения функций, чтобы из каждой функции логически следовала любая из последующих или сказать, что это  невозможно. Если ответ существует, то необходимо найти лексикографически минимальный порядок. Можно показать, что размер множества переменных, от которого зависят функции, не влияет на решение задачи”.
 Кедор – ваш лучший друг, а Гихаил – заклятый враг, поэтому вы решили помочь с решением задачи, а затем вместе с Кедором возобновить разговоры о политике, чтобы Гихаил от злости улетел на Луну.
 
Входные данные
В первой строке дано число n (1 <= n <= 10) – кол-во функций. 
Во второй строке дано n чисел в диапазоне [0; 10^9] – таблицы истинности функций, переведенные в десятичную систему счисления. 
Выходные данные
Если порядок существует, в первой строке выведите “YES”, во второй лексикографически минимальную перестановку из всех возможных. Если порядка нет, то выведите “NO”.

Пример
Ввод Вывод
3
3 1 7
YES
2 1 3
2
1 2
NO
 

(с)  Курбатов Е., 2017
 
Фермер Джон придумал игру для своих коров
 
Она играется на решётке R*C (2 <= R <= 750, 2 <= C <= 750), где каждый квадрат помечен целым числом от 1 до K (1 <= K <= R*C). Коровы выполняют последовательность прыжков, начиная в левом верхнем квадрате и заканчивая в правом нижнем квадрате и прыжок является корректным если и только если:
 
1) Вы прыгаете на квадрат c другим числом
 
2) Квадрат, куда Вы прыгаете, как минимум на одну строку ниже квадрата, в котором Вы сейчас стоите
 
3) Квадрат, в который Вы прыгаете как минимум на одну колонку правее квадрата, в котором Вы сейчас стоите
 
Пожалуйста, помогите коровам вычислить количество возможных различных последовательностей корректных прыжков из левого верхнего квадрата в правый нижний.
 
INPUT FORMAT:
Первая строка ввода содержит целые числа R, C, K. Каждая из следующих R строк содержит C целых чисел, каждое в интервале 1..K.
 
OUTPUT FORMAT
Выведите количество различных способов пропрыгать из левого верхнего угла в правый нижний, по модулю 1000000007.
 
Ввод Вывод
4 4 4
1 1 1 1
1 3 2 1
1 2 4 1
1 1 1 1
5
Ферма Джона представлена решёткой N×N полей (1≤N≤500). Каждое поле представлено символом латинского алфавита. Например:
ABCD
BXZX
CDXB
WCBA
Каждый день корова Беси прогуливается из верхнего левого угла в правый нижний, каждый раз двигаясь на один шаг вправо или вниз. Беси записывает в строку буквы, по которым прошлась. Она огорчится, если у неё получится палиндром (слово, которое читается одинаково слева направо и справа налево), поскольку тогда она запутается, в каком направлении двигалась.
 
Пожалуйста, помогите Беси определить количество различных маршрутов которыми она может получить палиндромы. Различные пути, которыми получаются одинаковые палиндромы учитывать множество раз. Выведите свой ответ по модулю 1,000,000,007.
 
ФОРМАТ ВВОДА:
Первая строка ввода содержит N, и последующие N строк содержат N строк решётки, описывающей поля. Каждая строка содержит N символов в интервале A..Z.
 
ФОРМАТ ВЫВОДА:
Выведите количество различных путей Беси, формирующих палиндромы по модулю 1,000,000,007.
 
Ввод Вывод
4
ABCD
BXZX
CDXB
WCBA
12
Примечание:
Беси может сделать следующие палиндромы:
 
1 x "ABCDCBA"
1 x "ABCWCBA"
6 x "ABXZXBA"
4 x "ABXDXBA"
В государстве Чудаков N городов ( 2 <=N <= 16 ), обозначаемых заглавными латинскими буквами, начиная с A, по порядку. Между некоторыми из них проложены дороги, которые могут быть как односторонними, так и двусторонними, причем не обязательно, что из каждого города можно проехать в любой другой.

В государстве всего один маршрут автобуса – 'Ч', который совершает только один рейс каждый день. Выходя из некоторого города, он совершает ровно N переездов между городами так, чтобы вернуться в тот, из которого выехал. Других ограничений на его маршрут нет. В течение дня автобус может несколько раз проезжать один и тот же город или дорогу. В каждом городе существуют автобусные парки, из которых могут выезжать автобусы маршрута 'Ч'. Так что, хотя автобус каждый день возвращается в город, из которого стартовал в этот день, на следующий день начало маршрута 'Ч' может быть из любого другого города. Но рейс каждый день только один.

Маршрут обозначается N буквами, начиная с города, из которого происходит выезд. Например, BCDCE – допустимый маршрут для государства из 5 городов ссоответствующими дорогами: выехать из B, проехать в C, затем в D, вернуться в C, проехать в E и вернуться в изначальный город B (последний пункт маршрута, совпадающий с первым, в маршруте не указывается).

Маршрут автобуса меняется каждый день так, что список маршрутов по дням расположен в словарном порядке и содержит все возможные маршруты. Когда список кончается, его обход начинается сначала. В первый день введения маршрута 'Ч' автобус шёл по первому по порядку маршруту. Выведите его маршрут на день K работы маршрута. Пример: В государстве четыре города: A, B, C, D. Наличие дорог между ними задано матрицей, где элемент равен 1, если из города, соответствующего строке, в город, соответствующий столбцу, есть дорога, и 0 – иначе (на главной диагонали нули – дорог, ведущих назад в тот же город, не бывает).

 
откуда/куда A B C D
A 0 0 1 1
B 1 0 1 1
C 0 1 0 0
D 0 1 1 0


Полное расписание маршрутов в таком государстве выглядит так:
ADCB
BADC
BCBC
BCBD
BDBC
BDBD
CBAD
CBCB
CBDB
DBCB
DBDB
DCBA

Таким образом, например, маршрут на день 30 – это BDBD.

Формат входных данных
В первой строке указывается количество городов N ( 2<= N <= 16 ). Далее следует N строк по N элементов (цифр), разделенных пробелом, содержащих матрицу, задающую дороги между городами. Далее следует строка содержащая целое число D – номер дня, маршрут которого требуется определить ( 1<= D <= 264 ).

Формат выходных данных
В единственной строке указывается маршрут, т.е. порядок посещения городов, например BDBD (см. предыдущий пример).
 
Ввод Вывод
3
0 1 1
1 0 1
1 1 0
4
BCA

 
На отдыхе в Теплой Стране Вера познакомилась с симпатичным волейболистом- трактористом Петром. Турист Петр, кстати, собирается после отличного отдыха в Теплой Стране отправиться в путешествие по городам Европы. Как известно, Европа облада- ет развитой транспортной системой: в Европе есть V интересующих Петра городов и E маршрутов ночных поездов. Каждый маршрут соединяет два различных города, время в пути составляет одну ночь. Поезда по маршруту ходят в обоих направлениях.

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

Но на этом прагматичность Петра не заканчивается: Петр, как настоящий турист, хо- чет посмотреть на самые красивые европейские достопримечательности. Он долго изучал справочники и для каждого города оценил свою ожидаемую радость от его посещения pi. Теперь он хочет найти маршрут, при котором его радость будет наибольшей. Помогите Петру найти такой маршрут.

Формат входного файла
В первой строке входных данных заданы два целых числа V и E (1 <= V, E <= 3 · 105 ) — количество городов и маршрутов поездов, соответственно. В следующей строке заданы V целых чисел pi (1 <= pi <= 108 ), где pi обозначает ожидаемую радость от посещения го- рода с номером i. В следующих E строках заданы описания маршрутов поездов. Каждое описание состоит из пары различных чисел ai и bi (1 <= ai, bi <= V ) — номеров городов, меж- ду которыми курсирует этот маршрут поезда. Гарантируется, что между каждой парой городов существует не более одного маршрута поезда.

Формат выходного файла
В первой строке выходных данных выведите число K (1 <= K <= 4) — количество горо- дов в оптимальном маршруте туриста Петра. В следующей строке выведите номера этих городов в порядке посещения. Города нумеруются начиная с единицы. Если оптимальных маршрутов несколько, выведите любой из них.
Ввод Вывод
5 4
4 2 3 1 5
1 2
2 3
3 4
4 5
4
2 3 4 5
4 3
1 2 3 4
1 2
1 3
1 4
3
4 1 3
✓ 0✗ 151 200средняяВойти и решать
Поделиться
Класснуть