Problem A

advertisement
XV Всероссийская олимпиада школьников по информатике, 2 тур
Санкт-Петербург, 3 апреля 2003 года
Задача 4. Фишки
Имя входного файла:
Имя выходного файла:
Ограничение по времени:
Ограничение по памяти:
Максимальная оценка:
fishes.in
fishes.out
2 секунды
32 мегабайта
100 баллов
Последовательность клеток занумерована числами от 1 до N. В каждой клетке стоит либо черная,
либо белая фишка. Группой назовем набор подряд стоящих фишек одного цвета, ограниченный с обеих
сторон фишками другого цвета или концами последовательности. Следует переместить фишки так,
чтобы они образовали не более двух групп.
Перемещение фишек описывается с помощью плана обмена, в котором используются понятия
операция обмена и шаг. Операция обмена меняет местами две соседние группы фишек. Шаг состоит не
более чем из K одновременно выполняемых обменов. Обмены можно совершать одновременно только
тогда, когда в них участвуют разные группы. После каждого шага группы одного цвета, оказавшиеся
рядом, объединяются. План обменов содержит описания шагов, выполняемых последовательно.
Шаг 1
Шаг 2
Напишите программу, определяющую план обменов, с помощью которого за наименьшее число
шагов получается последовательность, состоящая не более чем из двух групп.
Формат входных данных
В первой строке входного файла записаны числа N и K (1≤N≤100000 и 1≤K≤10000). Исходная
расстановка фишек задается в последующих строках, содержащих N чисел (0 или 1), разделенных
пробелами или переводами строк. При этом 0 соответствует черной фишке, 1 — белой.
Формат выходных данных
Выходной файл должен содержать описание шагов плана, по одному шагу на строке. Описание
шага начинается с числа L — количества обменов на этом шаге. Затем для каждого обмена указывается
минимальный номер клетки, в которой стоит фишка, участвующая в этом обмене. Последняя строка
плана должна содержать одно число 0.
Примеры
fishes.in
9
1
0
3
1
3
0 0 1 1
1 1 0
1
1 0
fishes.out
2 1 6
1 1
0
0
Примечание
Требуется найти план, содержащий наименьшее число шагов, при этом общее число обменов
может быть не минимальным.
Страница 1 из 6
XV Всероссийская олимпиада школьников по информатике, 2 тур
Санкт-Петербург, 3 апреля 2003 года
Эта страница является пустой
Страница 2 из 6
XV Всероссийская олимпиада школьников по информатике, 2 тур
Санкт-Петербург, 3 апреля 2003 года
Задача 5. Стекло
Имя входного файла:
Имя выходного файла:
Ограничение по времени:
Ограничение по памяти:
Максимальная оценка:
glass.in
glass.out
2 секунды
32 мегабайта
100 баллов
На столе расположено несколько треугольных осколков стекла. Были выдвинуты следующие
предположения:
 все эти осколки принадлежали одному прямоугольному стеклу, которое исходно лежало
так, что его стороны были параллельны краям стола;
 осколки получены в результате удара в некоторую точку стекла, не лежащую на его
границе;
 в момент удара одна из вершин каждого осколка находилась в точке удара;
 некоторые осколки, возможно, были сдвинуты;
 стекло может быть восстановлено параллельным переносом осколков, то есть ни один из
осколков не был повернут.
Напишите программу, помогающую при этих предположениях полностью восстановить
прямоугольное стекло из всех имеющихся осколков или определяющую, что это сделать невозможно.
Формат входных данных
В первой строке входного файла записано число N — количество осколков (1≤N≤2000).
Введем систему координат таким образом, чтобы оси координат были параллельны сторонам
стола. В каждой из следующих N строк записано по три пары чисел, задающих текущие координаты
вершин осколков. Все координаты — целые числа, по модулю не превосходящие 10000. Все осколки
имеют ненулевую площадь.
Формат выходных данных
Если стекло возможно восстановить при указанных предположениях, то в N строках выходного
файла выведите координаты вершин осколков после восстановления стекла. Стекло должно быть
восстановлено таким образом, чтобы координаты всех его углов были неотрицательны, и один из его
углов располагался в начале координат. Перечисление осколков и их вершин должно соответствовать
их порядку следования во входном файле.
В случае нескольких решений выведите любое из них.
В случае невозможности восстановить стекло в выходной файл выведите сообщение NO.
Продолжение задачи на следующей странице
Страница 3 из 6
XV Всероссийская олимпиада школьников по информатике, 2 тур
Санкт-Петербург, 3 апреля 2003 года
Примеры
glass.in
5
0 0 3 3 0 9
1 3 7 3 4 -3
1 6 7 6 4 9
5 3 8 6 8 9
6 4 9 1 9 7
4
0 0 20 -20 20 20
0 0 -20 20 -20 -20
0 0 -20 20 20 20
-1 0 20 -20 -20 -20
glass.out
0
0
0
3
3
0
9
0
3
3
3
6
6
6
6
NO
Страница 4 из 6
3
9
0
6
0
0
3
3
6
6
9
3
3
9
6
XV Всероссийская олимпиада школьников по информатике, 2 тур
Санкт-Петербург, 3 апреля 2003 года
Задача 6. Чайнворд
Имя входного файла:
Имя выходного файла:
Ограничение по времени:
Ограничение по памяти:
Максимальная оценка:
chain.in
chain.out
2 секунды
32 мегабайта
100 баллов
Журналисты газеты The Run Times к каждому номеру готовят чайнворд. Чайнворд — это
последовательность клеток, в которые читатель вписывает угаданные слова. При этом каждое
следующее слово последовательности должно начинаться с той же буквы, которой заканчивается
предыдущее, и эта буква записывается в одной клетке. Одно и то же слово в чайнворде может
встречаться несколько раз. Количество клеток в чайнворде называется его длиной. Например, в
чайнворд длины 9 можно вписать слова “set”, “too” и “olymp” следующим образом: “setoolymp”.
Из имеющегося списка слов журналисты должны составить чайнворд, а затем выделить в нем
некоторые клетки так, чтобы из прочитанных последовательно слева направо букв в выделенных
клетках образовывался лозунг спонсора газеты. Так, в приведенном выше примере чайнворд был
составлен специально для лозунга “soly”, который можно прочитать, если, например, выделить в
чайнворде первую, четвертую, шестую и седьмую клетки.
s
e
t
o
o
l
y m p
Для экономии места в газете журналисты хотят составить чайнворд минимальной длины.
Напишите программу, которая по заданному списку английских слов и лозунгу составит такой
чайнворд.
Входные данные
В первой строке входного файла записан лозунг спонсора, содержащий от одной до 250 букв. Во
второй строке записано число N — количество слов, которые можно использовать при составлении
чайнворда (1≤N≤1000). В последующих N строках перечисляются различных слова, каждое из которых
содержит от двух до 10 букв.
Лозунг и все слова состоят только из строчных латинских букв. Ни одна из строк входного файла
не содержит пробелов.
Выходные данные
В выходной файл выведите слова, из которых будет составлен чайнворд. Каждое слово должно
быть выведено в отдельной строке. Порядок слов определяется порядком их расположения в чайнворде.
Если решений несколько, выведите любое из них.
Если из заданных слов требуемый чайнворд составить невозможно, то выходной файл должен
содержать только один символ — знак вопроса.
Продолжение задачи на следующей странице
Страница 5 из 6
XV Всероссийская олимпиада школьников по информатике, 2 тур
Санкт-Петербург, 3 апреля 2003 года
Примеры
chain.in
soly
4
set
olymp
lye
too
solve
4
set
owe
evil
too
solve
7
olymp
set
too
pink
knot
parliament
tvs
chain.out
set
too
olymp
?
set
too
olymp
pink
knot
tvs
set
Примечание
Предварительная проверка решения будет осуществляться только на первых двух из приведенных
в примерах тестов. В случае их прохождения задача будет считаться принятой на проверку.
Страница 6 из 6
Download