Страница: 1 2 >> Отображать по:
ограничение по времени на тест
1.0 second;
ограничение по памяти на тест
64 megabytes
В финал конкурса Киноакадемии вышли \(n\) лучших кинофильмов 2014 года. В конкурсе награждаются фильмы в двух номинациях: лучшая режиссура и лучший сценарий. По правилам конкурса в каждой номинации должен быть награжден ровно один фильм, причём в разных номинациях — разные фильмы.

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

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

Формат входного файла

В первой строке входного файла задано целое число n — количество кинофильмов, участвующих в финале конкурса Киноакадемии. В следующих n строках содержатся по три целых числа \(a_i\) , \(b_i\) , \(c_i\) — уровень ликования, если \(i\)-й фильм не выиграет ни в одной из номинаций, уровень ликования, если этот фильм выиграет в номинации на лучшую режиссуру, и уровень ликования, если этот фильм выиграет в номинации на лучший сценарий.

Формат выходного файла

Первая строка выходного файла должна содержать одно число — наибольший возможный суммарный уровень ликования. Вторая строка должна содержать два целых числа — номера фильмов-победителей в номинациях лучшая режиссура и лучший сценарий соответственно. Фильмы нумеруются натуральными числами от 1 до \(n\). Если оптимальных способов выбора награждаемых фильмов несколько, можно вывести любой из них.

Система оценки
Подзадача 1

2 <= \(n\) <= 100

1 <= \(a_i\), \(b_i\), \(c_i\) <= \(10^5\)

Подзадача оценивается в 20 баллов

Подзадача 2

2 <= \(n\) <= 2000

1 <= \(a_i\), \(b_i\), \(c_i\) <= \(10^5\)

Подзадача оценивается в 25 баллов

Подзадача 3

2 <= \(n\) <= \(10^5\)

1 <= \(a_i\), \(b_i\), \(c_i\) <= \(10^9\)

Подзадача оценивается в 55 баллов

Пояснение к примеру

В приведенном примере наибольший суммарный уровень ликования равен 3 + 5 + 9 = 17.

Примеры
Входные данные
3
3 6 9
1 5 7
1 3 9
Выходные данные
17
2 3
ограничение по времени на тест
1.0 second;
ограничение по памяти на тест
64 megabytes
Планируется строительство новой магистрали «Урал». Долговечность автомагистрали зависит от пластов пород, залегающих под ней. Пластом называется геологическое тело, состоящее из одной горной породы.

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

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

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

Формат входного файла

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

В \(i\)-й из следующих \(n\) строк содержатся целые числа \(l_i\) и \(r_i\) (0 <= \(l_i\) < \(r_i\) <= \(10^9\) ) — расстояния от начала магистрали до точек, под которыми начинается и заканчивается \(i\)-й пласт.

В следующей строке записано целое число \(m\) — количество скважин, в которых проводилось бурение. Следующие \(m\) строк описывают результаты бурения: в каждой строке сначала указаны два целых числа \(x\) (0 <= \(x\) <= \(10^9\) ) и \(k\) (0 <= \(k\) <= \(n\)) — расстояние от начала магистрали до скважины и количество обнаруженных в данной скважине пластов, затем — целые числа \(s_1\); \(s_2\), ..., \(s_k\) — номера пробуренных пластов, перечисленные в порядке залегания сверху вниз. Скважины перечислены в порядке возрастания расстояния \(x\).

Гарантируется, что решение существует.

Формат выходного файла

Первая строка выходного файла должна содержать n целых чисел \(p_1\); \(p_2\), ..., \(p_n\), описывающих возможный порядок залегания пластов сверху вниз. Среди чисел \(p_1\), \(p_2\), ..., \(p_n\) каждый номер пласта должен встретиться ровно один раз. При этом пласт с номером \(p_j\) не должен нигде проходить выше пластов с номерами \(p_1\), ..., pj-1 или ниже пластов с номерами pj+1, ..., \(p_n\)

Если возможных расположений пластов несколько, выведите любое из них.

Система оценки

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

Подзадача 1

1 <= \(n\), \(m\) <= 1000

Каждая скважина пересекает все пласты, залегающие под ней

Подзадача оценивается в 20 баллов

Подзадача 2

1 <= \(n\), \(m\) <= 1000

Подзадача оценивается в 20 баллов

Подзадача 3

1 <= \(n\), \(m\) <= 30000

Суммарное количество пластов, найденных при бурении скважин, не более \(10^6\).

Подзадача оценивается в 20 баллов

Подзадача 4

1 <= \(n\), \(m\) <= \(10^5\)

Суммарное количество пластов, найденных при бурении скважин, не более \(10^5\).

Подзадача оценивается в 20 баллов

Подзадача 5

1 <= \(n\), \(m\) <= \(10^5\)

Суммарное количество пластов, найденных при бурении скважин, не более \(10^6\).

Подзадача оценивается в 20 баллов

Примеры
Входные данные
4
1 5
2 7
7 10
1 11
3
1 1 1
4 1 2
7 2 2 3
Выходные данные
2 1 3 4
ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
64 megabytes
План студенческого городка некоторого университета представляет собой квадрат \(n\) x \(n\), в каждой клетке которого расположено здание. Здания соединены переходами, если они расположены в клетках, имеющих общую сторону. В левом верхнем углу квадрата расположено студенческое общежитие. В правом нижнем углу расположен учебный корпус.

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

Руководство университета заинтересовалось разнообразием питания студентов, покупающих продукты в автоматах по ходу движения. Для каждого автомата Ai,j планируется найти кратчайший путь из общежития в учебный корпус, проходящий через этот автомат и содержащий как можно больше автоматов, торгующих тем же самым продуктом, что и автомат Ai,j. Количество таких автоматов на этом пути называется избыточностью автомата Ai,j. При этом автомат A1,1 находится в общежитии, а автомат An,n — в учебном корпусе.

Требуется написать программу, которая по информации о продуктах, продаваемых автоматами, для каждого из чисел в диапазоне от 1 до 2n - 1 определяет число автоматов с таким значением избыточности.

Формат входного файла

Первая строка входного файла содержит целое число n (2 <= \(n\) <= 1500). Следующие \(n\) строк содержат по \(n\) чисел в каждой. В \(i\)-й из этих строк \(j\)-е число соответствует номеру продукта, продающегося в автомате A i, j. Номера продуктов находятся в диапазоне от 1 до \(n^2\).

Формат выходного файла

Выходной файл должен содержать (2n - 1) целых чисел - количество автоматов с избыточностями 1, 2, ..., 2n - 1 соответственно

Система оценивания

Для проверки решений этой задачи используются 50 тестов. Тесты оцениваются независимо. Каждый тест оценивается в 2 балла. Значения n в тестах жюри приведены в следующей таблице.

Примеры
Входные данные
3
1 1 1
2 2 2
3 3 3
Выходные данные
0 0 9 0 0
Входные данные
5
1 4 1 3 5
2 1 4 1 2
5 1 1 4 5
3 5 1 1 2
4 3 5 1 1
Выходные данные
2 4 9 0 0 1 1 8 0
ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
256 megabytes
Робинзон живет на острове, который представляет собой прямоугольник размером \(n\) × \(m\) клеток.

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

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

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

Робинзон не кидает очередной орех, пока предыдущий крокодил не окажется в воде.

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

Формат входного файла

В первой строке входного файла записаны числа n и m — размеры острова с севера на юг и с запада на восток. Последующие n строк по m символов в каждой описывают текущее расположение крокодилов на острове. Если клетка свободна, то она обозначается точкой «.», а если там находится крокодил, то в ней указано направление, в котором побежит этот крокодил. Направления обозначаются буквами: «N» — север, «S» — юг, «E» — восток, «W» — запад

Формат выходного файла

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

Система оценки

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

Подзадача 1

1 <= \(n\), \(m\) <= 30. Подзадача оценивается в 30 баллов.

Подзадача 2

1 <= \(n\), \(m\) <= 500. Подзадача оценивается в 30 баллов.

Подзадача 3

1 <= \(n\), \(m\) <= 2000. Подзадача оценивается в 40 баллов.

Рисунок к третьему примеру

Примеры
Входные данные
1 1
.
Выходные данные
0
Входные данные
1 1
W
Выходные данные
1
Входные данные
5 7
.......
...S...
..WE...
...N...
.......
Выходные данные
2
ограничение по времени на тест
5.0 second;
ограничение по памяти на тест
256 megabytes
У Пети на полке стоят n тетрадей с полным собранием его идей. Тетради пронумерованы различными целыми числами от 1 до \(n\). У Пети есть привычная расстановка тетрадей (возможно, не в порядке нумерации), и он не любит, когда кто-то их переставляет. Петя купил специального Робота, который умеет запоминать расстановку тетрадей и вычислять число беспорядков в этой расстановке.

Робот считает, что две тетради образуют беспорядок, если тетрадь с меньшим номером стоит правее тетради с большим номером. Например, в расстановке (2; 1; 5; 3; 4) беспорядки образуют три пары тетрадей (2; 1), (5; 3) и (5; 4), поэтому число беспорядков в такой расстановке равно 3.

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

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

Протокол взаимодействия

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

Сначала ваша программа должна прочитать из стандартного потока ввода два целых числа \(n\) и \(m\) — количество тетрадей Пети и количество беспорядков в его привычной расстановке.

Затем протокол общения вашей программы и программы жюри следующий:

* Для перестановки двух тетрадей ваша программа выводит в стандартный поток вывода запрос в формате: swap \(i\) \(j\), где \(i\) и \(j\) — номера позиций тетрадей, которые Робот должен поменять местами (1 <= \(i\), \(j\) <= \(n\); i != j). После этого она должна считать из стандартного потока ввода одно целое число — количество беспорядков в получившейся расстановке. Ваша программа может сделать не более 300 000 запросов.

* Когда ваша программа сможет восстановить привычную расстановку тетрадей, она должна вывести эту расстановку в формате: answer \(p\), где \(p\) — последовательность из n различных целых чисел в диапазоне от 1 до \(n\), и завершить работу.

Запрос на обмен и вывод привычной расстановки должны завершаться переводом строки и сбросом буфера потока вывода. Для этого используйте flush(output) в Pascal/Delphi; fflush(stdout) или cout.flush() в С/C++.

Система оценки

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

Подзадача 1

1 <= \(n\) <= 100. Подзадача оценивается в 30 баллов.

Подзадача 2

1 <= \(n\) <= 8000. Подзадача оценивается в 20 баллов.

Подзадача 3

1 <= \(n\) <= 60000. Подзадача оценивается в 30 баллов.

Подзадача 4

1 <= \(n\) <= 100000. Подзадача оценивается в 20 баллов.


Страница: 1 2 >> Отображать по:
Выбрано
:
Отменить
|
Добавить в контест