ВВОД-ВЫВОД ВО ВСЕХ ЗАДАЧАХ СТАНДАРТНЫЙ, ТО ЕСТЬ С КЛАВИАТУРЫ И

advertisement
ВВОД-ВЫВОД ВО ВСЕХ ЗАДАЧАХ СТАНДАРТНЫЙ, ТО ЕСТЬ С КЛАВИАТУРЫ И
НА ЭКРАН! НЕ НУЖНО ИСПОЛЬЗОВАТЬ ФАЙЛОВЫЙ ВВОД-ВЫВОД!
Ограничение по времени на все задачи – 0.5 сек, по памяти – 64 Mb.
01. 123-последовательность (60 баллов)
Задана последовательность целых чисел a1, a2,..., an, в которой каждое число от 1 до 3
включительно. Требуется заменить в ней наименьшее количество чисел так, чтобы все числа в
последовательности оказались равны между собой.
Входные данные
В первой строке задано целое число n (1 ≤ n ≤ 106). Вторая строка содержит последовательность
a1, a2,..., an (1 ≤ ai ≤ 3).
Выходные данные
Выведите наименьшее количество изменений, которое надо сделать, чтобы уравнять все числа в
последовательности.
Пример(ы)
input.txt
output.txt
9
1 3 2 2 2 1 1 2 3
5
Комментарий
В примере все числа, равные 1 и 3 надо заменить на 2.
02. Преобразование (60 баллов)
Дана последовательность n целых чисел ai (1 ≤ n ≤ 100, 1 ≤ ai ≤ 100). Примените к ней
преобразование, которое всякое число ai заменяет на 0, если существует индекс j, j < i, такой что ai
= aj. Другими словами, все числа, которые встречались ранее в последовательности, если
рассматривать ее в порядке слева направо, нужно заменить нулями.
Входные данные
Первая строка содержит число n — длину последовательности. Во второй строке содержится n
чисел, разделенных пробелами.
Выходные данные
Выведите последовательность после преобразования. Числа разделяйте пробелами. После
последнего выведенного числа не должно быть концевых пробелов.
Пример(ы)
input.txt
output.txt
2
29 27
29 27
input.txt
output.txt
14
1 3 7 6 6 2 6 1 7 1 7 5 7 1
1 3 7 6 0 2 0 0 0 0 0 5 0 0
03. Конфеты (60 баллов)
На Новый Год каждый в компании из N человек получил в подарок K конфет. После
продолжительной игры в фанты на конфеты выяснилось, что конфеты между участниками
перераспределились. Теперь у первого игрока A1 конфет, у второго - A2, ..., у N-ого - AN. Вскоре
компания решила, что было нечестно играть в фанты на конфеты, и поэтому решено было заново
распределить конфеты поровну. Они это решили делать следующим образом: кто-то за 1 ход отдает
свою конфету другому игроку. За один ход лишь только один человек может отдавать одну
конфету. Какое наименьшее количество ходов им понадобится? Как следует проводить
перераспределение?
Входные данные
В первой строке входного файла содержатся два натуральных числа N, K (1 <= N <= 5000; 1 <= K
<= 1000). Далее во второй строке содержится последовательность неотрицательных целых чисел
A1, A2, ..., AN. Числа в последовательности записаны через пробел. Гарантируется, что A1 + A2 +
... + AN = N*K.
Выходные данные
В выходной файл выведите искомое наименьшее количество ходов M. Гарантируется, что M <=
10000. Далее в M строках выведите описание каждого хода в виде двух целых чисел Pi, Qi (1 <= i
<= M). Эта пара чисел обозначает, что игрок под номером Pi отдает конфету Qi-ому игроку. Если
решений несколько, выведите любое.
Пример
Ввод
4 2
0 3 2 3
Вывод
2
2 1
4 1
04. Расшифровка (60 баллов)
Компания Macrohard решила повысить уровень защищенности своих операционных систем,
осуществляя шифрование всех сообщений, передаваемых внутри локальных сетей. Будем считать,
что сообщение представляет собой строку S = s1s2...sn, состоящую исключительно из букв
латинского алфавита. Шифрование производится в K фаз. На каждой фазе строка S заменяется
строкой, в которой в первую очередь выписаны все буквы строки S, стоящие на местах, номера
которых являются простыми числами (первый блок), а затем все остальные буквы (второй блок).
Относительный порядок букв в каждом из двух блоков остается неизменным. Например, строка S =
abcdefgh за первую фазу шифруется в строку S = bcegadfh. Если осуществить вторую фазу
шифрования, то строка S примет вид S = ceafbgdh. Напомним, что число называется простым, если
оно натуральное и имеет ровно два различных натуральных делителя. Простые числа: 2, 3, 5, 7,
11... Вам дан результат шифрования строки S после K фаз. Ваша задача произвести дешифрование
строки.
Входные данные
В первой строке входного файла содержится натуральное число K (1 <= K <= 100), вторая строка
содержит строку S, которая состоит только из букв латинского алфавита. Ее длина - натуральное
число, не превосходящее 255.
Выходные данные
Выходной файл должен содержать дешифрованную строку S. Регистр букв является значимым и его
следует сохранять.
Пример
Ввод
Test #1
2
CEAFBGDH
Test #2
1
BAAAACB
Вывод
Test #1
ABCDEFGH
Test #2
ABACABA
05. Функция (60 баллов)
В языке программирования ОГОЛ вызывать функции можно лишь из функций, которые описаны
после описания той функции, которая вызывается. В частности, функция не может вызывать себя.
Программист Петя спроектировал программу, которая должна быть написана на этом языке. В
частности, в проекте указано, какие функции вызываются из какой функции. Для удобства Петя
пронумеровал все функции числами от 1 до N.
Требуется написать программу, которая определяет, в каком порядке функции должны быть
описаны в программе на языке ОГОЛ.
Входные данные
В первой строке входного файла содержится число N (1 <= N <= 100) - количество функций,
которые должны быть в программе. Далее идут N строк, причем i-я строка содержит описание
функций, которые должны вызываться из i-й функции. Это описание сначала содержит число количество функций, которые вызываются из данной функции, а затем номера вызываемых
функций (одна и та же функция может вызываться из одной функции несколько раз).
Выходные данные
Необходимо вывести в строку через пробел номера функций в том порядке, в каком они должны
быть описаны в программе. Если написать такую программу на языке ОГОЛ невозможно, в
выходной файл нужно поместить одно число 0. Если решений несколько, то выведите любое.
Пример
Ввод
Пример 1
3
0
4 1 1 3 1
1 1
Пример 2
2
1 2
1 1
Вывод
Пример 1
1 3 2
Пример 2
0
06. Зигзаги (60 баллов)
Последовательность A1, A2, ..., AK называется зигзагом, если верны неравенства A1 < A2 > A3 < A4
> ... и т.д. или A1 > A2 < A3 > A4 < ... и дальше. Например, последовательности 1, -1, 0 и 10, 20,
9, 24, 11, 20 - зигзаги, также любые последовательности из одного или двух различных чисел тоже
зигзаги. На доске написано N чисел. Ваша задача найти наименьшее количество чисел, которые
надо удалить, что бы остался зигзаг и номера этих чисел в последовательности.
Входные данные
В первой строке входного файла записано число N (1 <= N <= 1000). Далее следует N чисел последовательность чисел, записанных на доске. Каждое из них целое, по абсолютной величине не
превосходящее 10^6. Числа во входном файле разделяются пробелами и/или символами перевода
строки.
Выходные данные
В первой строке выведите единственное число - наименьшее количество чисел, которые надо
удалить, чтобы остался зигзаг. Во второй строке выведите номера этих чисел в данной
последовательности. Номера разделяйте пробелами. Если решений несколько, то выведите любое
из них.
Пример
Ввод
4
1 2 3 1
Вывод
1
3
Download